一开始没有考虑到左子树的所有节点都要小于根节点,右子树要大于根节点,本质上是边界没有考虑仔细,所以比较时需向上比较(和父节点)而不是向下比较(和子节点比大小)
根节点没有父节点,因此初始化时引用最大最小值即可,注意这里的数值范围
点击查看代码
class Solution {
public boolean isValidBST(TreeNode root) {
return isValid(root, Long.MIN_VALUE, Long.MAX_VALUE);
}
private boolean isValid(TreeNode root, long lower, long upper) {
if (root == null) {
return true;
}
if(root.val <= lower || root.val >= upper) {
return false;
}
return isValid(root.left, lower, root.val) && isValid(root.right, root.val, upper);
}
}