lotus

贵有恒何必三更眠五更起 最无益只怕一日曝十日寒

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1. 题目

 

2. 解法

 

当我们需要对一棵树进行层序遍历时,我们可以使用队列来记录遍历过程。具体实现步骤如下:

  1. 首先将根节点入队。
  2. 当队列不为空时,取出队首元素,将其值存入结果列表中。
  3. 如果该节点有左子节点,则将其左子节点入队。
  4. 如果该节点有右子节点,则将其右子节点入队。
  5. 重复步骤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 

BFS解答思路:一般会借助队列

  • BFS 是一种广度优先搜索算法,用于图的遍历和搜索。它从起点开始,逐层向外遍历,直到找到目标节点或遍历完整张图。
  • 在遍历的过程中,每个节点都会被访问一次且仅一次。BFS 通常使用队列来实现,每次将当前节点的所有邻居节点加入队列中,然后从队列头部取出一个节点作为下一次遍历的起点。
  • 这样可以保证每个节点都是按照距离从近到远的顺序被访问的

 

DFS

DFS 是深度优先搜索(Depth First Search)的缩写。它是一种连通图的遍历策略,从一个顶点开始,沿着一条路走到底,直到不能再走为止,然后回退到上一个节点,继续走其他路径。

DFS 可以用于解决许多计算机科学问题,例如在图中查找两个节点之间的路径,拓扑排序等。以下是一些 DFS 的经典应用 :

  1. 拓扑排序
  2. 有向无环图的遍历
  3. 无向图的连通性问题
  4. 二分图判定

BFS解答思路: 一般 使用 递归 和 栈

DFS 一般使用递归和栈来实现。在递归实现 DFS 的时候,似乎不需要使用任何栈。但是,深度优先搜索(DFS)可以使用栈来实现。其主要思路是,从起始节点开始,将其加入栈中,然后循环执行以下操作:从栈顶弹出一个节点。如果该节点是目标节点,则返回结果。否则,将该节点的未访问邻居节点加入栈中,并将这些节点标记为已访问

 

posted on 2023-04-25 13:54  白露~  阅读(9)  评论(0编辑  收藏  举报