【98.验证二叉搜索树】【Java】【添加新的解法】

This commit is contained in:
jasonlu
2021-03-13 18:22:17 +08:00
parent 81ae656527
commit 1eb0084ca8

View File

@ -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;
}
```