思路
利用二叉搜索树的特性,左子树均小于根节点,右子树均大于根节点; 所以我们利用一个函数,传入一个节点的左右子树,以及它所对应的最大值和最小值;
- 对于左子树,最小值为空,最大值就是当前根节点的值
- 对于右子树,最大值为空,最小值就是当前根节点的值
根据这个规律,依次递归的查找每个节点的左右子树,是否在其对应的范围之内,如果最后到达叶子结点都符合,说明是二叉搜索树,返回true;只要有一个不符合,就返回false
代码实现(java)
class Solution {
public boolean isValidBST(TreeNode root) {
return isBST(root, null, null);
}
public boolean isBST(TreeNode root, TreeNode min, TreeNode max) {
if(root == null) return true;
if(min != null && root.val <= min.val) return false;
if(max != null && root.val >= max.val) return false;
return isBST(root.left, min, root) && isBST(root.right, root, max);
}
}
|