美文网首页
ORID54 BFS

ORID54 BFS

作者: Wilbur_ | 来源:发表于2020-12-14 21:23 被阅读0次

117. Populating Next Right Pointers in Each Node II 解题报告

算法

这道题虽然在DFS这个标签里,而且跟之前Populating Next Right Pointers in Each Node 这道题很像,但是这道题用BFS做更合适,因为之前那道题有前提条件,那就是这个BST是个完美的BST,左右平衡。所以recursion可以用backtracking(每个叶子节点都做一遍)来做。
这道题的前提条件就是这颗二叉树不会左右平衡了,所以你需要考虑如果左边叶子节点想要连接到右边的叶子结点的时候,如果右边叶子结点不存在怎么办。这时候实际上BFS能更轻松的解决这个问题。
因为BFS实际上是level order traversal,你可以逐层遍历,那么你所需要的只是把每一层的节点从左到右连接起来。这样无论有一个叶子节点是否缺少,你都只需要把这一层的节点来连接起来就好了……
为什么用这个算法?
BFS能更轻松的解决这个问题。

代码实现

有什么要注意的地方?
其实这道题解决的精髓还是在把问题想清楚这个方面上。如果你能够看清这道问题本质上是level order traversal,那么你就清楚的想到了用BFS来做。问题就迎刃而解了
代码

    public Node connect(Node root) {
        if (root == null) return root;
        Queue<List<Node>> q = new LinkedList<>();
        List<Node> first = new ArrayList<>();
        first.add(root);
        q.add(first);
        while (!q.isEmpty()) {
            List<Node> currentLevel = q.poll();
            int size = currentLevel.size();
            List<Node> nextLevel = new ArrayList<>();
            for (int i = 0; i < size; i++) {
                Node node = currentLevel.get(i);
                if (i + 1 == size) {
                    node.next = null;
                } else {
                    node.next = currentLevel.get(i+1);
                }                
                if (node.left != null) {
                    nextLevel.add(node.left);
                }
                if (node.right != null) {
                    nextLevel.add(node.right);
                }
            }
            if (nextLevel.size() != 0) {
                q.add(nextLevel);
            }            
        }
        return root;
    }

时间空间复杂度

O(n) (这颗树的总共节点)

哪些相关题目做过的?

目前没想到。

相关文章

  • ORID54 BFS

    117. Populating Next Right Pointers in Each Node II 解题报告 ...

  • 走迷宫(BFS例题)

    BFS例题---走迷宫 BFS对应数据结构queue BFS算法时间复杂度O(n^2) BFS算法不走走过的点 的...

  • 什么时候用BFS,什么时候用DFS

    参考什么时候用dfs,什么时候用bfs 参考什么时候用DFS,什么时候用BFS? BFS的缺点适用情况 BFS的一...

  • Binary Tree(2)

    BFS vs DFS for Binary Tree What are BFS and DFS for Binar...

  • BFS/DFS python模板与实现

    BFS BFS在搜索完第k层的节点之前,是不会搜索第k+1层的节点的。 BFS原理 BFS所用的是队列。把每个还没...

  • Chapter12—搜索—广搜

    1. 题目列表 POJ3126(BFS) POJ3087(BFS) POJ3414(BFS+路径打印) 2. 广搜...

  • BFS及其应用

    内容概要: BFS类的实现 BFS求解连通分量 BFS求解无向图点对之间的一条最短路径 BFS判定无环图和二分图 ...

  • 8.19 - hard - 64

    317 . Shortest Distance from All Buildings 典型的BFS的题目,BFS可...

  • H - 8 HDU - 1495

    BFS

  • BFS与DFS总结

    BFS判断连通性 DFS判断连通性 BFS最优解(不走重复路径) BFS最优解(走重复路径) DFS回溯(不走重复...

网友评论

      本文标题:ORID54 BFS

      本文链接:https://www.haomeiwen.com/subject/foipsktx.html