描述
给定一个二叉树,判断它是否是合法的二叉查找树(BST)
一棵BST定义为:
- 节点的左子树中的值要严格小于该节点的值。
- 节点的右子树中的值要严格大于该节点的值。
- 左右子树也必须是二叉查找树。
- 一个节点的树也是二叉查找树。
样例
一个例子:
2
/ \
1 4
/ \
3 5
上述这棵二叉树序列化为 {2,1,4,#,#,3,5}
.
思路: 分治法,递归判断当前以当前节点为根的数是不是二叉查找树,但是这里有一个注意点,就是左子树的所有节点都需要小于原始根节点的值,而不是只是比父节点小就可以了,同理,右子树也是一样的道理。
Java代码:
public boolean isValidBST(TreeNode root) {
// write your code here
return divConq(root, Long.MIN_VALUE, Long.MAX_VALUE);
}
public boolean divConq(TreeNode root, long min, long max){
if(root == null){
return true;
}
if(root.val > max || root.val < min){
return false;
}
return divConq(root.left, min, Math.max(min, root.val))
& divConq(root.right, Math.min(max, root.val), max);
}