File tree Expand file tree Collapse file tree 4 files changed +132
-12
lines changed
solution/0000-0099/0098.Validate Binary Search Tree Expand file tree Collapse file tree 4 files changed +132
-12
lines changed Original file line number Diff line number Diff line change 4141
4242<!-- 这里可写通用的实现逻辑 -->
4343
44+ 中序遍历,若是一个有效的二叉搜索树,那么遍历到的序列应该是单调递增的。所以只要比较判断遍历到的当前数是否 ` >= ` 上一个数即可。
45+
4446<!-- tabs:start -->
4547
4648### ** Python3**
4749
4850<!-- 这里可写当前语言的特殊实现逻辑 -->
4951
5052``` 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
5272```
5373
5474### ** Java**
5575
5676<!-- 这里可写当前语言的特殊实现逻辑 -->
5777
5878``` 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+ }
60105```
61106
62107### ** ...**
Original file line number Diff line number Diff line change 6565### ** Python3**
6666
6767``` 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
6987```
7088
7189### ** Java**
7290
7391``` 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+ }
75118```
76119
77120### ** ...**
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+ */
116class Solution {
2-
3- private long current = Long .MIN_VALUE ;
4-
17+ private Integer pre = null ;
518 public boolean isValidBST (TreeNode root ) {
619 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 ;
1225 }
1326}
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