题目:
已解答
中等
相关标签
相关企业
给你一个二叉树的根节点 root
,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
- 节点的左子树只包含 小于 当前节点的数。
- 节点的右子树只包含 大于 当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
示例 1:
输入:root = [2,1,3] 输出:true
示例 2:
输入:root = [5,1,4,null,null,3,6] 输出:false 解释:根节点的值是 5 ,但是右子节点的值是 4 。
提示:
- 树中节点数目范围在
[1, 104]
内 -231 <= Node.val <= 231 - 1
解题思路:
利用中序遍历遍历整个树,如果后边的值比前边的值小则说明不是二叉搜索树
因为二叉搜索树的左子树的值小于父母节点值,右子树的值大于父母节点的值,意味着中序遍历的结果应该是一个有序数组
代码:
# 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:
# 判断是否是二叉搜索树可以通过判断中序遍历是否是有序数列就行
def inorder(root):
if not root:
return None
inorder(root.left)
results.append(root.val)
inorder(root.right)
results = []
inorder(root)
for i in range(1, len(results)):
if results[i]<=results[i-1]:
return False
return True