1. 题目
2. 解法
当我们需要对一棵树进行层序遍历时,我们可以使用队列来记录遍历过程。具体实现步骤如下:
- 首先将根节点入队。
- 当队列不为空时,取出队首元素,将其值存入结果列表中。
- 如果该节点有左子节点,则将其左子节点入队。
- 如果该节点有右子节点,则将其右子节点入队。
- 重复步骤2-4,直到队列为空。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | public static List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> ans = new ArrayList<>(); if (root == null ) { return ans; } Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); while (!queue.isEmpty()) { int size = queue.size(); List<Integer> levelTemp = new ArrayList<>(); for ( int i = 0 ; i < size; i++) { TreeNode temp = queue.poll(); levelTemp.add(temp.val); if (temp.left != null ) queue.offer(temp.left); if (temp.right != null ) queue.offer(temp.right); } ans.add(levelTemp); } return ans; } |
3. 总结
BFS
- Breadth First Search.
- BFS 是广度优先搜索(Breadth First Search)的缩写。它是一种连通图的遍历策略,从一个顶点开始,辐射状地优先遍历其周围较广的区域。
- BFS 可以用于解决许多计算机科学问题,例如在图中查找两个节点之间的最短路径,层序遍历等。以下是一些 BFS 的经典应用
- 迷宫问题
- 迷宫问题变形
- 迷宫问题升级版
- 最短路径问题
- 图的遍历
BFS解答思路:一般会借助队列
- BFS 是一种广度优先搜索算法,用于图的遍历和搜索。它从起点开始,逐层向外遍历,直到找到目标节点或遍历完整张图。
- 在遍历的过程中,每个节点都会被访问一次且仅一次。BFS 通常使用队列来实现,每次将当前节点的所有邻居节点加入队列中,然后从队列头部取出一个节点作为下一次遍历的起点。
- 这样可以保证每个节点都是按照距离从近到远的顺序被访问的
DFS
DFS 是深度优先搜索(Depth First Search)的缩写。它是一种连通图的遍历策略,从一个顶点开始,沿着一条路走到底,直到不能再走为止,然后回退到上一个节点,继续走其他路径。
DFS 可以用于解决许多计算机科学问题,例如在图中查找两个节点之间的路径,拓扑排序等。以下是一些 DFS 的经典应用 :
- 拓扑排序
- 有向无环图的遍历
- 无向图的连通性问题
- 二分图判定
BFS解答思路: 一般 使用 递归 和 栈
DFS 一般使用递归和栈来实现。在递归实现 DFS 的时候,似乎不需要使用任何栈。但是,深度优先搜索(DFS)可以使用栈来实现。其主要思路是,从起始节点开始,将其加入栈中,然后循环执行以下操作:从栈顶弹出一个节点。如果该节点是目标节点,则返回结果。否则,将该节点的未访问邻居节点加入栈中,并将这些节点标记为已访问
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2021-04-25 Dubbo源码分析(十)同步调用与异步调用
2021-04-25 Dubbo源码分析(九)负载均衡算法
2021-04-25 Dubbo源码分析(八)集群容错机制
2021-04-25 Dubbo源码分析(七)服务目录
2021-04-25 Dubbo源码分析(六)服务引用的具体流程
2021-04-25 Dubbo源码分析(五)服务暴露的具体流程(下)
2021-04-25 Dubbo源码分析(四)服务暴露的具体流程(上)