leetcode 98 Valid Binary Search Tree
z

Given a binary tree, determine if it is a valid binary search tree (BST).

Assume a BST is defined as follows:

  • The left subtree of a node contains only nodes with keys less than the node’s key.
  • The right subtree of a node contains only nodes with keys greater than the node’s key.
  • Both the left and right subtrees must also be binary search trees.

Example 1:

1
2
3
4
5
Input:
2
/ \
1 3
Output: true

Example 2:

1
2
3
4
5
6
7
8
    5
/ \
1 4
/ \
3 6
Output: false
Explanation: The input is: [5,1,4,null,null,3,6]. The root node's value
is 5 but its right child's value is 4.

  • 使用一个stack,每遇到一个node,一直向左走,将经过的元素加入栈中
  • pop出一个元素,使之为root,标记该root为pre,继续下一次向左走,此时,比较每一个经过的值和pre的大小
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
public boolean isValidBST(TreeNode root) {
if(root == null){
return true;
}
Stack<TreeNode> s = new Stack<>();
TreeNode pre = null;
while(!s.isEmpty() || root != null){
while(root != null){
s.add(root);
root = root.left;
}

root = s.pop();
if (pre != null && pre.val >= root.val){
return false;
}
pre = root;
root = root.right;
}
return true;

}
}