给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
示例 1:
此题要求判断一个二叉搜索树是否有效,如果采用由底向上的递归是不行的,因为需要关注的是节点的整个左子树或右子树,比如:[10,5,15,null,null,6,20],必须由上向下进行递归,这样对于下面的节点才能考虑到上面节点的值,代码如下:
class Solution {
public boolean isValidBST(TreeNode root) {
if (root == null)
return true;
long max = Long.MAX_VALUE;
long min = Long.MIN_VALUE;
return helper(root,min,max);
}
private boolean helper(TreeNode root, long min, long max) {
if (root == null)
return true;
if (root.val > min && root.val < max)
return helper(root.left,min,root.val) && helper(root.right,root.val,max);
else
return false;
}
}
注意初始的min和max需要是long类型的。