给你一个二叉树的根节点 root 判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。
思路:
- BST的中序遍历是有序的,因此我们可以对BST进行中序遍历,并判断遍历结果是否为升序。
- 递归判断每个节点是否满足BST的定义,即左子树的最大值小于当前节点的值,右子树的最小值大于当前节点的值。
代码1(中序遍历):
class Solution: def isValidBST(self, root: TreeNode) -> bool: self.prev = None # 记录上一个遍历到的节点 def inorder(node): if not node: return True if not inorder(node.left): return False if self.prev and self.prev.val >= node.val: return False self.prev = node return inorder(node.right) return inorder(root)
代码2(递归判断):
class Solution: def isValidBST(self, root: TreeNode) -> bool: def helper(node, lower=float('-inf'), upper=float('inf')): if not node: return True val = node.val if val <= lower or val >= upper: return False if not helper(node.left, lower, val): return False if not helper(node.right, val, upper): return False return True return helper(root
原文地址: http://www.cveoy.top/t/topic/fI7E 著作权归作者所有。请勿转载和采集!