跳转至

06 - 二叉树与递归分治

1. 思维框架

把树问题拆成“当前节点 + 左子树 + 右子树”三部分。

常见遍历: - 前序:处理当前,再左右 - 中序:左当前右 - 后序:先左右,再处理当前

2. 递归模板

Python
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right


def max_depth(root: TreeNode) -> int:
    if not root:
        return 0
    return 1 + max(max_depth(root.left), max_depth(root.right))

3. 分治模板(返回多信息)

Python
from math import inf

def is_valid_bst(root: TreeNode) -> bool:
    def dfs(node):
        if not node:
            return True, inf, -inf
        ok_l, min_l, max_l = dfs(node.left)
        ok_r, min_r, max_r = dfs(node.right)
        ok = ok_l and ok_r and max_l < node.val < min_r
        return ok, min(min_l, node.val), max(max_r, node.val)
    return dfs(root)[0]

4. 复杂度要求

  • DFS/BFS 遍历:O(n)
  • 递归栈:最坏 O(n),平衡树约 O(log n)

5. 训练清单

  • 二叉树层序遍历
  • 最近公共祖先
  • 路径总和
  • 将有序数组转换为 BST