358 字
2 分钟
代码随想录算法训练营第十五天 | 二叉树 Part05

654. 最大二叉树#

LeetCode 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. 合并二叉树#

LeetCode 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. 二叉搜索树中的搜索#

LeetCode 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. 验证二叉搜索树#

LeetCode 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/
作者
Jarrett
发布于
2025-06-27
许可协议
CC BY-NC-SA 4.0