1. 题目
2. 解法
当我们需要对一棵树进行层序遍历时,我们可以使用队列来记录遍历过程。具体实现步骤如下:
- 首先将根节点入队。
- 当队列不为空时,取出队首元素,将其值存入结果列表中。
- 如果该节点有左子节点,则将其左子节点入队。
- 如果该节点有右子节点,则将其右子节点入队。
- 重复步骤2-4,直到队列为空。
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)可以使用栈来实现。其主要思路是,从起始节点开始,将其加入栈中,然后循环执行以下操作:从栈顶弹出一个节点。如果该节点是目标节点,则返回结果。否则,将该节点的未访问邻居节点加入栈中,并将这些节点标记为已访问