验证二叉查找树
给定一个二叉树,判断它是否是合法的二叉查找树(BST)
一棵BST定义为:
- 节点的左子树中的值要严格小于该节点的值。
- 节点的右子树中的值要严格大于该节点的值。
- 左右子树也必须是二叉查找树。
- 一个节点的树也是二叉查找树。
您在真实的面试中是否遇到过这个题?
Yes
样例
一个例子:
2
/ \
1 4
/ \
3 5
上述这棵二叉树序列化为 {2,1,4,#,#,3,5}
.
- 递归方式实现,需要注意左右子树的上下界定
/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.val = val; * this.left = this.right = null; * } * } */ public class Solution { /** * @param root: The root of binary tree. * @return: True if the binary tree is BST, or false */ public static boolean isValidBST(TreeNode root) { // write your code here if (root == null) { return true; } return isValidBSTRec(root, Long.MIN_VALUE, Long.MAX_VALUE); } public static boolean isValidBSTRec(TreeNode root, long low, long up) { if (root == null) { return true; } // 不在范围内 if (root.val <= low || root.val >= up) { return false; } return isValidBSTRec(root.left, low, root.val) && isValidBSTRec(root.right, root.val, up); } }