应用题-二叉树专题-验证二叉搜索树
**~~错误写法~~**
想简单了, 注意二叉搜索树的概念
例如下面这个测试用例, 下面代码就通过不了
**[5,4,6,null,null,3,7]**
```python
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def isValidBST(self, root: Optional[TreeNode]) -> bool:
# 二叉搜索树的递归定义
# 1. 左子树的值 小于 根节点的值
# 右子树的值 大于 根节点的值
# 2. 左右子树也符合上述定义
# 自底向上 站在根节点上 判断左右子树是否是搜索二叉树
if not root: return True
l, r, v = root.left, root.right, root.val
# 判断是否可以继续向下
if not l and not r: return True
if l and l.val >= v or r and r.val <= v: return False
st1 = self.isValidBST( root.left )
st2 = self.isValidBST( root.right )
return st1 and st2
```
**正解:利用二叉搜索树的性质**
二叉搜索树的中序遍历是递增的。
```python
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def __init__( self ):
self.maxvalue = float( '-inf' )
def isValidBST(self, root: Optional[TreeNode]) -> bool:
if not root: return True
st1 = self.isValidBST( root.left )
if root.val > self.maxvalue: self.maxvalue = root.val
else: return False
st2 = self.isValidBST( root.right )
# 左右子树 都符合中序递增
return st1 and st2
```