给定一个二叉树,请确定它是否为有效的二叉树(BST)。
二叉树定义:
- 节点的左子树仅包含键值小于节点键值的节点。
- 节点的右子树仅包含键大于该节点的键的节点。
- 左子树和右子树都必须也是二进制搜索树。
public boolean isValidBST(TreeNode root) {
return isBST(root,Long.MAX_VALUE,Long.MIN_VALUE);
}
private boolean isBST(TreeNode root,long max,long min){
if(root == null) return true;
if(root.val >= max || root.val <= min) return false;
//向左递归,当前节点值为最大值
//向右递归,当前节点值为最小值
return isBST(root.left,root.val,min) && isBST(root.right,max,root.val);
}
public static boolean isValidBST_2(TreeNode root) {
if (root == null) return true;
Stack<TreeNode> stack = new Stack<>();
TreeNode pre = null; //指向上一个遍历的节点
while (root != null || !stack.isEmpty()) {
//左子节点入栈
while (root != null) {
stack.push(root);
root = root.left;
}
root = stack.pop();
//中序遍历,逐个比较节点值
if (pre != null && root.val <= pre.val)
return false;
pre = root;
root = root.right;
}
return true;
}
LeetCode 98:Validate Binary Search Tree
原文:https://www.cnblogs.com/le-le/p/12920358.html