美文网首页
116. Populating next right point

116. Populating next right point

作者: Wilbur_ | 来源:发表于2020-10-15 06:33 被阅读0次

    这道题实际上就是要你能够分别出用什么方法来解决。

    用什么算法

    这道题其实挺明显使用level order traversal来做的,但是我一开始居然还想着用divide and conquer。
    它实际上在默认设置中node.next 就是null所以你在循环的时候只需要把队列里面的node.next设置好就行了,最后一个根本不用管。其实没有这个default设置你也只需要再加一个判断条件就可以了。就是当前指针如果在队列最后一个element,直接把node.next指到null就可以了。

    这道题8月底的时候做过,没想到过两个月就忘了。还是需要多加练习。因为你还是对数据结构理解不够深刻,不知道这道题实际上用level order traversal就可以直接解决。
    下面是代码,实际上就是再练习了一遍queue的用法……

        public Node connect(Node root) {
            if (root == null) return root;
            Queue<Node> queue = new LinkedList<>();
            Node res = root;
            queue.add(root);
            while (!queue.isEmpty()) {
                int size = queue.size();
                for (int i = 0; i < size; i++) {
                    Node cur = queue.poll();
                    if (i < size - 1) {
                        cur.next = queue.peek();
                    }
                    if (cur.left != null) {
                        queue.add(cur.left);
                    }
                    if (cur.right != null) {
                        queue.add(cur.right);
                    }
                }
            }
            return res;
        }
    

    时空复杂度

    Time O(N)
    Space O(N)
    空间复杂度可以优化。后面可以学习一下

    相关文章

      网友评论

          本文标题:116. Populating next right point

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