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