File tree 4 files changed +132
-12
lines changed
solution/0000-0099/0098.Validate Binary Search Tree
4 files changed +132
-12
lines changed Original file line number Diff line number Diff line change 41
41
42
42
<!-- 这里可写通用的实现逻辑 -->
43
43
44
+ 中序遍历,若是一个有效的二叉搜索树,那么遍历到的序列应该是单调递增的。所以只要比较判断遍历到的当前数是否 ` >= ` 上一个数即可。
45
+
44
46
<!-- tabs:start -->
45
47
46
48
### ** Python3**
47
49
48
50
<!-- 这里可写当前语言的特殊实现逻辑 -->
49
51
50
52
``` python
51
-
53
+ # Definition for a binary tree node.
54
+ # class TreeNode:
55
+ # def __init__(self, val=0, left=None, right=None):
56
+ # self.val = val
57
+ # self.left = left
58
+ # self.right = right
59
+ class Solution :
60
+ pre = None
61
+ def isValidBST (self , root : TreeNode) -> bool :
62
+ if not root:
63
+ return True
64
+ if not self .isValidBST(root.left):
65
+ return False
66
+ if self .pre is not None and self .pre >= root.val:
67
+ return False
68
+ self .pre = root.val
69
+ if not self .isValidBST(root.right):
70
+ return False
71
+ return True
52
72
```
53
73
54
74
### ** Java**
55
75
56
76
<!-- 这里可写当前语言的特殊实现逻辑 -->
57
77
58
78
``` java
59
-
79
+ /**
80
+ * Definition for a binary tree node.
81
+ * public class TreeNode {
82
+ * int val;
83
+ * TreeNode left;
84
+ * TreeNode right;
85
+ * TreeNode() {}
86
+ * TreeNode(int val) { this.val = val; }
87
+ * TreeNode(int val, TreeNode left, TreeNode right) {
88
+ * this.val = val;
89
+ * this.left = left;
90
+ * this.right = right;
91
+ * }
92
+ * }
93
+ */
94
+ class Solution {
95
+ private Integer pre = null ;
96
+ public boolean isValidBST (TreeNode root ) {
97
+ if (root == null ) return true ;
98
+ if (! isValidBST(root. left)) return false ;
99
+ if (pre != null && pre >= root. val) return false ;
100
+ pre = root. val;
101
+ if (! isValidBST(root. right)) return false ;
102
+ return true ;
103
+ }
104
+ }
60
105
```
61
106
62
107
### ** ...**
Original file line number Diff line number Diff line change 65
65
### ** Python3**
66
66
67
67
``` python
68
-
68
+ # Definition for a binary tree node.
69
+ # class TreeNode:
70
+ # def __init__(self, val=0, left=None, right=None):
71
+ # self.val = val
72
+ # self.left = left
73
+ # self.right = right
74
+ class Solution :
75
+ pre = None
76
+ def isValidBST (self , root : TreeNode) -> bool :
77
+ if not root:
78
+ return True
79
+ if not self .isValidBST(root.left):
80
+ return False
81
+ if self .pre is not None and self .pre >= root.val:
82
+ return False
83
+ self .pre = root.val
84
+ if not self .isValidBST(root.right):
85
+ return False
86
+ return True
69
87
```
70
88
71
89
### ** Java**
72
90
73
91
``` java
74
-
92
+ /**
93
+ * Definition for a binary tree node.
94
+ * public class TreeNode {
95
+ * int val;
96
+ * TreeNode left;
97
+ * TreeNode right;
98
+ * TreeNode() {}
99
+ * TreeNode(int val) { this.val = val; }
100
+ * TreeNode(int val, TreeNode left, TreeNode right) {
101
+ * this.val = val;
102
+ * this.left = left;
103
+ * this.right = right;
104
+ * }
105
+ * }
106
+ */
107
+ class Solution {
108
+ private Integer pre = null ;
109
+ public boolean isValidBST (TreeNode root ) {
110
+ if (root == null ) return true ;
111
+ if (! isValidBST(root. left)) return false ;
112
+ if (pre != null && pre >= root. val) return false ;
113
+ pre = root. val;
114
+ if (! isValidBST(root. right)) return false ;
115
+ return true ;
116
+ }
117
+ }
75
118
```
76
119
77
120
### ** ...**
Original file line number Diff line number Diff line change
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
+ */
1
16
class Solution {
2
-
3
- private long current = Long .MIN_VALUE ;
4
-
17
+ private Integer pre = null ;
5
18
public boolean isValidBST (TreeNode root ) {
6
19
if (root == null ) return true ;
7
- if (isValidBST (root .left ) && current < root . val ) {
8
- current = root .val ;
9
- return isValidBST ( root .right ) ;
10
- }
11
- return false ;
20
+ if (! isValidBST (root .left )) return false ;
21
+ if ( pre != null && pre > = root .val ) return false ;
22
+ pre = root .val ;
23
+ if (! isValidBST ( root . right )) return false ;
24
+ return true ;
12
25
}
13
26
}
Original file line number Diff line number Diff line change
1
+ # Definition for a binary tree node.
2
+ # class TreeNode:
3
+ # def __init__(self, val=0, left=None, right=None):
4
+ # self.val = val
5
+ # self.left = left
6
+ # self.right = right
7
+ class Solution :
8
+ pre = None
9
+ def isValidBST (self , root : TreeNode ) -> bool :
10
+ if not root :
11
+ return True
12
+ if not self .isValidBST (root .left ):
13
+ return False
14
+ if self .pre is not None and self .pre >= root .val :
15
+ return False
16
+ self .pre = root .val
17
+ if not self .isValidBST (root .right ):
18
+ return False
19
+ return True
You can’t perform that action at this time.
0 commit comments