Skip to content

Commit cf1696a

Browse files
committed
validate-binary-search-tree
1 parent d72835c commit cf1696a

1 file changed

Lines changed: 59 additions & 0 deletions

File tree

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* public class TreeNode {
4+
* int val;
5+
* TreeNode left;
6+
* TreeNode right;
7+
* TreeNode() {}
8+
* TreeNode(int val) { this.val = val; }
9+
* TreeNode(int val, TreeNode left, TreeNode right) {
10+
* this.val = val;
11+
* this.left = left;
12+
* this.right = right;
13+
* }
14+
* }
15+
*/
16+
class Solution {
17+
boolean answer = true;
18+
Deque<Integer> leftStack = new ArrayDeque<>();
19+
Deque<Integer> rightStack = new ArrayDeque<>();
20+
21+
public boolean isValidBST(TreeNode root) {
22+
rightStack.push(root.val);
23+
dfs(root.left, root, "left");
24+
rightStack.pop();
25+
26+
leftStack.push(root.val);
27+
dfs(root.right, root, "right");
28+
leftStack.pop();
29+
30+
return answer;
31+
}
32+
33+
public void dfs(TreeNode node, TreeNode parent, String direction) {
34+
if (node == null) return;
35+
36+
if (direction.equals("left") && node.val >= parent.val){
37+
answer = false;
38+
}
39+
if (direction.equals("right") && node.val <= parent.val){
40+
answer = false;
41+
}
42+
if (!leftStack.isEmpty() && node.val <= leftStack.peek()) {
43+
answer = false;
44+
}
45+
if (!rightStack.isEmpty() && node.val >= rightStack.peek()) {
46+
answer = false;
47+
}
48+
49+
rightStack.push(node.val);
50+
dfs(node.left, node, "left");
51+
rightStack.pop();
52+
53+
leftStack.push(node.val);
54+
dfs(node.right, node, "right");
55+
leftStack.pop();
56+
}
57+
}
58+
59+

0 commit comments

Comments
 (0)