思路
原题链接
- 使用递归函数需要定义三个参数
- 分别是,当前的节点,一个最小的值lower,一个最大的值upper
- 当node为null,则直接返回true
- 当node.val 小于最小,即小于所有可能的左侧叶子节点,或者node.val 大于最大,即大于所有可能的右侧叶子节点,则返回false
- 之后递归判断node.left and node.right ,此时的递归函数的参数已经改变了,node.left 的最大值变为了上一层的node.val ,而node.right 的最小值变为了上一层的node.val
class Solution {
public boolean isValidBST(TreeNode root) {
//要考虑int的边界值,就要用更大范围数据类型去比较判断
return recur(root, Long.MIN_VALUE, Long.MAX_VALUE);
}
public boolean recur(TreeNode node, long lower, long upper){
if(node == null) return true;
if(node.val <= lower || node.val >= upper) return false;
//此时的参数上下限已经改变,需注意
return recur(node.left, lower, node.val) && recur(node.right, node.val, upper);
}
}