深度优先 一直往一个方向走,可用递归或者栈实现
你说得对,英文里 DFS 确实是 Depth-First Search(深度优先搜索),而中文“递归方法”只是实现手段之一,它们不是完全等价的概念,但在二叉树操作中往往相关。让我帮你理清楚:
1️⃣ DFS 和递归的关系
DFS(深度优先搜索) 是一种 访问节点的策略,特点是尽可能沿一条分支访问到底再回溯。
递归 是实现 DFS 的常用手段,但 DFS 也可以用栈迭代来实现。
所以在二叉树翻转里:
root.left, root.right = root.right, root.left invertTree(root.left) invertTree(root.right)
这就是 DFS 思路 + 递归实现:
先处理根节点
再沿左子树 DFS
再沿右子树 DFS
2️⃣ 举例:翻转二叉树的 DFS 顺序
假设原始二叉树:
4/ \2 7/ \ / \1 3 6 9
DFS 递归访问顺序
访问根节点
4
→ 交换左右子树 → 左子树变7
,右子树变2
递归左子树(原来的右子树
7
):访问
7
→ 交换左右子树 → 左9
,右6
递归
9
→ 是叶子节点,返回递归
6
→ 是叶子节点,返回
递归右子树(原来的左子树
2
):访问
2
→ 交换左右子树 → 左3
,右1
递归
3
→ 是叶子节点,返回递归
1
→ 是叶子节点,返回
翻转后:
4/ \7 2/ \ / \9 6 3 1
✅ 可以看到,DFS 是 访问顺序,递归只是实现 DFS 的一种方便方法。
3️⃣ DFS vs BFS 对比
方法 | 访问顺序 | 实现手段 | 例子(翻转二叉树) |
---|---|---|---|
DFS | 根 → 左 → 右(或其他深度优先顺序) | 递归或栈 | 上面例子就是 DFS 顺序翻转 |
BFS | 一层一层 → 从左到右 | 队列 | levelOrder 层序遍历 |
如果你愿意,我可以帮你画一个 DFS 翻转二叉树的访问顺序示意图,把节点访问顺序和交换顺序标出来,比文字更直观。
你希望我画吗?