98. 验证二叉搜索树
题目描述
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
- 节点的左子树只包含 小于 当前节点的数。
- 节点的右子树只包含 大于 当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
示例 1:
输入:root = [2,1,3]
输出:true
示例 2:
输入:root = [5,1,4,null,null,3,6]
输出:false
解释:根节点的值是 5 ,但是右子节点的值是 4 。
提示:
- 树中节点数目范围在
[
1
,
1
0
4
]
[1, 10^4]
[1,104] 内
-
?
2
31
<
=
N
o
d
e
.
v
a
l
<
=
2
31
?
1
-2^{31} <= Node.val <= 2^{31} - 1
?231<=Node.val<=231?1
中序遍历
只要中序遍历是从小到大的,就说明这个二叉树是搜索二叉树。
class Solution:
def isValidBST(self, root: TreeNode) -> bool:
l = []
def traverse(root):
if not root:
return
traverse(root.left)
l.append(root.val)
traverse(root.right)
traverse(root)
return True if l == sorted(l) and len(l) == len(set(l)) else False
小改一下:
class Solution:
def isValidBST(self, root: TreeNode) -> bool:
l = []
def traverse(root):
if not root:
return True
if not traverse(root.left):
return False
if l and root.val <= l[len(l)-1]:
return False
l.append(root.val)
if not traverse(root.right):
return False
return True
return traverse(root)
|