98. 验证二叉搜索树
题目
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
- 节点的左子树只包含 小于 当前节点的数。
- 节点的右子树只包含 大于 当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
示例 1:
输入:root = [2,1,3]
输出:true
思路 (Switte)
中序遍历时,判断当前节点是否大于中序遍历的前一个节点,如果大于,说明满足 BST,继续遍历;否则直接返回 false。
盲点
一个合格的BST中序遍历结果是递增序列
递归结束条件 Base Case
当前节点为null,已经到叶子节点的子节点,返回true,表示这条路径没问题
更新pre的时机:自身节点和pre比完,想一下第一次比较就知道什么时候更新了
代码
public class o98 {
long pre = Long.MIN_VALUE;
public boolean isValidBST(TreeNode root) {
if (root == null) {
return true;
}
if (!isValidBST(root.left)) {
return false;
}
if (root.val <= pre) {
return false;
}
pre = root.val;
return isValidBST(root.right);
}
public static void main(String[] args) {
TreeNode n1 = new TreeNode(1);
TreeNode n3 = new TreeNode(3);
TreeNode n2 = new TreeNode(2, n1, n3);
o98 main = new o98();
System.out.println(main.isValidBST(n2));
}
}

浙公网安备 33010602011771号