应用题-二叉树专题-验证二叉搜索树

管理员
**~~错误写法~~** 想简单了, 注意二叉搜索树的概念 例如下面这个测试用例, 下面代码就通过不了 **[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 ```
评论 0

发表评论 取消回复

Shift+Enter 换行  ·  Enter 发送
还没有评论,来发表第一条吧