Level Order 遍历

Populating Next Right Pointers in Each Node

本质上是一个BFS的问题,利用上一层已经连接好的next指针作为一个queue来使用。可以在O(1)的时间和O(n)的空间来解决。

public class Solution {
    public void connect(TreeLinkNode root) {
        if(root == null) return;

        TreeLinkNode cur = root, nextLevel = null;

        while(cur.left != null) {
            nextLevel = cur.left;
            while(cur != null) {
                // 因为是完全二叉树,所以可以一个loop里面连接两次
                cur.left.next = cur.right;

                if(cur.next == null) {
                    cur.right.next = null;
                } else {
                    cur.right.next = cur.next.left;
                }
                cur = cur.next;
            }
            cur = nextLevel;
        }
    }
}

Populating Next Right Pointers in Each Node II

这一题出现了几个问题:

  • 中间有空缺节点的话,怎么让上层找到“下一个”正确的节点
  • 如果某一层最左边有空缺的话,如何在进入下一层的时候找到正确的起点。(dummy node)

这一题的本质是:我们要做的其实是 level order 建一个 LinkedList(Queue) 出来。

public class Solution {
    public void connect(TreeLinkNode root) {
        while(root != null) {
            TreeLinkNode dummy = new TreeLinkNode(0);
            TreeLinkNode cur = dummy;
            for(; root != null; root = root.next) {
                if(root.left != null) {
                    cur.next = root.left;
                    cur = cur.next;
                }
                if(root.right != null) {
                    cur.next = root.right;
                    cur = cur.next;
                }
            }
            root = dummy.next;
        }
    }
}

results matching ""

    No results matching ""