验证是否是二叉树,每一个子节点需要和父节点和根节点比较,而不是只和父节点比较就可以的。
例如:
2
/ \
1 3
\
4
根2的范围是(负无穷,正无穷)。
2的左子树1的范围是( 负无穷 ,2)
2的右子树3的范围是(2, 正无穷 )
3的右子树4的范围是(3, 正无穷 )
如果任何一个节点的值超过其应该的范围,一定不是二叉搜索树。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
private int data = -1;
public boolean dfs(TreeNode root,long low,long high)
{
if(root == null) return true;
if(root.val <= low || root.val >= high) return false;
return dfs(root.left,low,root.val) && dfs(root.right,root.val,high);
}
public boolean isValidBST(TreeNode root) {
return dfs(root,-(Long.MAX_VALUE-2),Long.MAX_VALUE);
}
}