一、核心差异:算法思想与实现方式
1.1 数据结构选择
| 算法 | 核心数据结构 | Java实现方式 |
|---|---|---|
| DFS | 栈(Stack) | 递归 或 Stack<T> |
| BFS | 队列(Queue) | Queue<T>(通常用LinkedList实现) |
1.2 实现代码对比
DFS典型实现(回溯法)
// 递归实现(图结构)
void dfs(Node node) {
if (node == null || visited.contains(node)) return;
visited.add(node); // 访问节点逻辑
for (Node neighbor : node.neighbors) {
dfs(neighbor);
}
}
BFS典型实现(层序遍历)
void bfs(Node root) {
Queue<Node> queue = new LinkedList<>();
queue.offer(root);
visited.add(root);
while (!queue.isEmpty()) {
Node current = queue.poll();
// 处理当前节点...
for (Node neighbor : current.neighbors) {
if (visited.add(neighbor)) { // 未访问过
queue.offer(neighbor);
}
}
}
}
二、遍历顺序的直观对比
2.1 树形结构遍历图示
A
B
C
D
E
F
G
-
DFS访问顺序:A → B → D → E → C → F → G
-
BFS访问顺序:A → B → C → D → E → F → G
三、性能特点与复杂度分析
3.1 时间复杂度与空间复杂度
| 指标 | DFS | BFS |
|---|---|---|
| 时间复杂度 | O(V + E) | O(V + E) |
| 空间复杂度 | O(h)(树高) | O(w)(最大宽度) |
| 内存消耗特征 | 由递归深度决定 | 由层级节点数决定 |

最低0.47元/天 解锁文章
850

被折叠的 条评论
为什么被折叠?



