358 字
2 分钟
代码随想录算法训练营第十五天 | 二叉树 Part05
654. 最大二叉树
class Solution: # 使用前序遍历:根 -> 左 -> 右 # 每次找到数组中最大值作为根节点,递归构建左右子树 def constructMaximumBinaryTree(self, nums: List[int]) -> Optional[TreeNode]: return self.build(nums, 0, len(nums) - 1)
def build(self, nums, l, r): if l > r: return None index = -1 # 标记最大值索引 max_val = float('-inf') for i in range(l, r + 1): if max_val < nums[i]: index = i max_val = nums[i] root = TreeNode(max_val) root.left = self.build(nums, l, index - 1) root.right = self.build(nums, index + 1, r) return root
617. 合并二叉树
class Solution: # 若两个节点都存在,则值相加 # 若其中一个不存在,返回另一个 def mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]: if not root1: return root2 if not root2: return root1 root1.val += root2.val root1.left = self.mergeTrees(root1.left, root2.left) root1.right = self.mergeTrees(root1.right, root2.right) return root1
700. 二叉搜索树中的搜索
class Solution: # 利用二叉搜索树特性: # 左子树 < 根节点 < 右子树 def searchBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]: if not root: return None if val > root.val: return self.searchBST(root.right, val) if val < root.val: return self.searchBST(root.left, val) return root
98. 验证二叉搜索树
class Solution: # 每个节点必须满足 min < node.val < max 的条件 # 递归向下更新 min/max 限制区间 def isValidBST(self, root: Optional[TreeNode]) -> bool: return self.isValid(root, None, None)
def isValid(self, root, min_node, max_node): if not root: return True if min_node is not None and root.val <= min_node.val: return False if max_node is not None and root.val >= max_node.val: return False return self.isValid(root.left, min_node, root) and self.isValid(root.right, root, max_node)
代码随想录算法训练营第十五天 | 二叉树 Part05
https://fuwari.vercel.app/posts/code_musings_day_fiveteen/