Open larscheng opened 2 months ago
迭代:二叉搜索树的中序遍历为升序数组,通过迭代的方式进行中序遍历,同时判断迭代出的元素是否为升序
class Solution1 {
//递归判断每个节点的上下界
public boolean isValidBST(TreeNode root) {
return isValidBST(root, Long.MIN_VALUE, Long.MAX_VALUE);
}
public boolean isValidBST(TreeNode node, long lower, long upper) {
if (node == null) {
return true;
}
if (node.val <= lower || node.val >= upper) {
return false;
}
return isValidBST(node.left, lower, node.val) && isValidBST(node.right, node.val, upper);
}
}
```java
//中序遍历升序数组
//递归需要检查所有节点,迭代可以优化复杂度
public boolean isValidBST(TreeNode root) {
double lastNum = -Double.MAX_VALUE;
Stack<TreeNode> stack = new Stack<>();
while (root != null || !stack.isEmpty()) {
while (root != null) {
stack.push(root);
root = root.left;
}
TreeNode node = stack.pop();
if (node.val<=lastNum){
return false;
}
lastNum = node.val;
root = node.right;
}
return true;
}
98. 验证二叉搜索树