题目描述
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
总结
需要注意 非边界节点需要满足两个条件,大于父节点,小于祖父节点,或者小于父节点,大于祖父节点
SDC值得好好看看
SDC2把搜索二叉树用中序转换为数组,遍历判断就行了
Sample & Demo Code 1
class Solution {
public boolean isValidBST(TreeNode root) {
return isValid(root, null, null);
}
private boolean isValid(TreeNode root, TreeNode min, TreeNode max) {
if(root == null)return true;
if((max!=null && root.val >= max.val)||
(min!=null && root.val <= min.val)) return false;
if(root.left!=null && !isValid(root.left, min, root))return false;
if(root.right!=null && !isValid(root.right, root, max))return false;
return true;
}
}
Sample & Demo Code 2
class Solution {
public boolean isValidBST(TreeNode root) {
Stack<TreeNode> stack = new Stack();
double inorder = - Double.MAX_VALUE;
while(!stack.isEmpty() || root != null) {
while(root != null) {
stack.push(root);
root = root.left;
}
root = stack.pop();
if(root.val <= inorder) return false;
inorder = root.val;
root = root.right;
}
return true;
}
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/validate-binary-search-tree