mirror of
https://github.com/labuladong/fucking-algorithm.git
synced 2025-07-05 03:36:39 +08:00
【98.验证二叉搜索树】【Java】【添加新的解法】
This commit is contained in:
@ -121,28 +121,6 @@ boolean isValidBST(TreeNode root, TreeNode min, TreeNode max) {
|
||||
}
|
||||
```
|
||||
|
||||
扩展解法:
|
||||
对于BST,有一个重要的性质,即“BST的中序遍历是单调递增的”。抓住这个性质,我们可以通过中序遍历来判断该二叉树是不是BST。
|
||||
```java
|
||||
TreeNode preNode = null;
|
||||
public boolean isValidBST(TreeNode root) {
|
||||
if (root == null) return true;
|
||||
|
||||
boolean leftRes = isValidBST(root.left);
|
||||
|
||||
if (preNode != null && root.val <= preNode.val) {
|
||||
return false;
|
||||
}
|
||||
preNode = root;
|
||||
|
||||
boolean rightRes = isValidBST(root.right);
|
||||
|
||||
return leftRes && rightRes;
|
||||
}
|
||||
```
|
||||
我们定义preNode节点表示上一个遍历的节点,在中序遍历的时候,比较当前节点和preNode节点的大小,一旦有节点小于或等于前一个节点,则不满足BST的规则,直接返回false,否则遍历结束,返回true。
|
||||
|
||||
|
||||
**一、在 BST 中查找一个数是否存在**
|
||||
|
||||
根据我们的指导思想,可以这样写代码:
|
||||
@ -469,4 +447,28 @@ class Solution:
|
||||
while node.right:
|
||||
node = node.right
|
||||
return node
|
||||
```
|
||||
```
|
||||
|
||||
### java
|
||||
```
|
||||
/**
|
||||
* 第【98】题的扩展解法:
|
||||
* 对于BST,有一个重要的性质,即“BST的中序遍历是单调递增的”。抓住这个性质,我们可以通过中序遍历来判断该二叉树是不是BST。
|
||||
* 我们定义preNode节点表示上一个遍历的节点,在中序遍历的时候,比较当前节点和preNode节点的大小,一旦有节点小于或等于前一个节点,则不满足BST的规则,直接返回false,否则遍历结束,返回true。
|
||||
*/
|
||||
TreeNode preNode = null;
|
||||
public boolean isValidBST(TreeNode root) {
|
||||
if (root == null) return true;
|
||||
|
||||
boolean leftRes = isValidBST(root.left);
|
||||
|
||||
if (preNode != null && root.val <= preNode.val) {
|
||||
return false;
|
||||
}
|
||||
preNode = root;
|
||||
|
||||
boolean rightRes = isValidBST(root.right);
|
||||
|
||||
return leftRes && rightRes;
|
||||
}
|
||||
```
|
||||
|
Reference in New Issue
Block a user