验证二叉搜索树

98.验证二叉搜索树

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。

有效 二叉搜索树定义如下:

  • 节点的左子树只包含 小于 当前节点的数。
  • 节点的右子树只包含 大于 当前节点的数。
  • 所有左子树和右子树自身必须也是二叉搜索树。

示例 1:

img

1
2
输入:root = [2,1,3]
输出:true

示例 2:

img

1
2
3
输入:root = [5,1,4,null,null,3,6]
输出:false
解释:根节点的值是 5 ,但是右子节点的值是 4

提示:

  • 树中节点数目范围在[1, 104]
  • -231 <= Node.val <= 231 - 1

递归法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
TreeNode pre = null;
public boolean isValidBST(TreeNode root) {
if(root == null) return true;

boolean left = isValidBST(root.left);
if(pre != null && root.val <= pre.val){
return false;
}
pre = root.val;
boolean right =isValidBST(root.right);
return left && right;
}
}

迭代法(中序遍历)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public boolean isValidBST(TreeNode root) {
if(root==null) return true;
TreeNode pre = null;
Stack<TreeNode> st = new Stack<>();
while(root != null || !st.isEmpty()){
while(root != null){
st.push(root);
root = root.left;
}
root = st.pop();
if(pre != null && root.val <= pre.val){ //当前节点的值小于或等于前序结点
return false;
}else{
pre = root;
}
root = root.right;
}
return true;
}

验证二叉搜索树
http://example.com/2023/04/13/算法/二叉树/21. 验证二叉搜索树/
作者
PALE13
发布于
2023年4月13日
许可协议