Leetcode - Populating Next Right Pointers in Each Node II

My code:

/**
 * Definition for binary tree with next pointer.
 * public class TreeLinkNode {
 *     int val;
 *     TreeLinkNode left, right, next;
 *     TreeLinkNode(int x) { val = x; }
 * }
 */
public class Solution {
    public void connect(TreeLinkNode root) {
        if (root == null)
            return;
        
        Queue<TreeLinkNode> q = new LinkedList<TreeLinkNode>();
        q.offer(root);
        while (!q.isEmpty()) {
            int levelSize = q.size();
            TreeLinkNode next = null;
            for (int i = 0; i < levelSize; i++) {
                TreeLinkNode temp = q.poll();
                if (i == 0) {
                    temp.next = null;
                    next = temp;
                }
                else {
                    temp.next = next;
                    next = temp;
                }
                if (temp.right != null)
                    q.offer(temp.right);
                if (temp.left != null)
                    q.offer(temp.left);
            }
        }
        
    }
}

My test result:


Paste_Image.png

直接拿上面那道題目的代碼,就直接過測試了。。。

**
總結: 右層序遍歷樹
**

Anyway, Good luck, Richardo!

My code:

/**
 * Definition for binary tree with next pointer.
 * public class TreeLinkNode {
 *     int val;
 *     TreeLinkNode left, right, next;
 *     TreeLinkNode(int x) { val = x; }
 * }
 */
public class Solution {
    public void connect(TreeLinkNode root) {
        if (root == null)
            return;
        Queue<TreeLinkNode> q = new LinkedList<TreeLinkNode>();
        q.offer(root);
        while (!q.isEmpty()) {
            int size = q.size();
            TreeLinkNode prev = null;
            for (int i = 0; i < size; i++) {
                TreeLinkNode curr = q.poll();
                if (curr.right != null && curr.left != null) {
                    curr.right.next = prev;
                    curr.left.next = curr.right;
                    prev = curr.left;
                    q.offer(curr.right);
                    q.offer(curr.left);
                }
                else if (curr.right == null && curr.left == null)
                    continue;
                else if (curr.right != null) {
                    curr.right.next = prev;
                    prev = curr.right;
                    q.offer(curr.right);
                }
                else {
                    curr.left.next = prev;
                    prev = curr.left;
                    q.offer(curr.left);
                }
            }
        }
        
    }
}

這次我的代碼是過于復雜了點。

Anyway, Good luck, Richardo!

My code:

/**
 * Definition for binary tree with next pointer.
 * public class TreeLinkNode {
 *     int val;
 *     TreeLinkNode left, right, next;
 *     TreeLinkNode(int x) { val = x; }
 * }
 */
public class Solution {
    public void connect(TreeLinkNode root) {
        if (root == null) {
            return;
        }
        
        Queue<TreeLinkNode> q = new LinkedList<TreeLinkNode>();
        q.offer(root);
        while (!q.isEmpty()) {
            int size = q.size();
            TreeLinkNode pre = null;
            for (int i = 0; i < size; i++) {
                TreeLinkNode curr = q.poll();
                curr.next = pre;
                pre = curr;
                if (curr.right != null) {
                    q.offer(curr.right);
                }
                if (curr.left != null) {
                    q.offer(curr.left);
                }
            }
        }
        
    }
}

以前的做法比較簡單,
但是
space: O(n)
time: O(n)

然后看到了
space 優化到 O(1) 的做法,
自己寫了下:

My code:

/**
 * Definition for binary tree with next pointer.
 * public class TreeLinkNode {
 *     int val;
 *     TreeLinkNode left, right, next;
 *     TreeLinkNode(int x) { val = x; }
 * }
 */
public class Solution {
    public void connect(TreeLinkNode root) {
        if (root == null) {
            return;
        }
        
        TreeLinkNode head = root;
        TreeLinkNode curr = null;
        TreeLinkNode prev = null;
        while (head != null) {
            curr = head;
            head = null;
            prev = null;
            while (curr != null) {
                if (curr.left != null) {
                    if (prev != null) {
                        prev.next = curr.left;
                    }
                    else {
                        head = curr.left;
                    }
                    prev = curr.left;
                }
                if (curr.right != null) {
                    if (prev != null) {
                        prev.next = curr.right;
                    }
                    else {
                        head = curr.right;
                    }
                    prev = curr.right;
                }
                curr = curr.next;
            }
        }
        
    }
}

reference:
https://discuss.leetcode.com/topic/1106/o-1-space-o-n-complexity-iterative-solution/7

其實也是一種BFS的思想

不得不說,我的BFS理解真的很差,解題能力也很差。
趕緊補。

Anyway, Good luck, Richardo! -- 09/06/2016

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容