关闭

Populating Next Right Pointers in Each Node II (hard)

标签: Populating Next Righ
49人阅读 评论(0) 收藏 举报
分类:

【题目】

Follow up for problem "Populating Next Right Pointers in Each Node".

What if the given tree could be any binary tree? Would your previous solution still work?

Note:

  • You may only use constant extra space.

For example,
Given the following binary tree,

         1
       /  \
      2    3
     / \    \
    4   5    7

After calling your function, the tree should look like:

         1 -> NULL
       /  \
      2 -> 3 -> NULL
     / \    \
    4-> 5 -> 7 -> NULL

【题意】

      如果有右孩子,则使其next为右孩子,否则为null,但是本身是任意二叉树不满足是满二叉树

【分析】

    

【实现】

/**
 * 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;  
        }  
           
        // 找到与root同一行的next node  
        TreeLinkNode rootNext = root.next;  
        TreeLinkNode next = null;       // 下一个被连接的对象  
           
        // rootNext如果是null说明已经处理完这一层的所有node  
        // next不等于null说明找到了找到最左边的下一个被连接的对象  
        while (rootNext != null && next == null)  
        {  
            if (rootNext.left != null){ // 优先找左边  
                next = rootNext.left;  
            } else{  
                next = rootNext.right;  
            }  
            rootNext = rootNext.next;  
        }  
    
        if (root.left != null)  
        {  
            if (root.right != null){    //  内部相连  
                root.left.next = root.right;  
            }else{                      // 跨树相连  
                root.left.next = next;  
            }  
        }  
        if (root.right != null){        // 跨树相连  
            root.right.next = next;  
        }  
           
        connect(root.right);        // 要先让右边都先连起来  
        connect(root.left);  
        
    }
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:8516次
    • 积分:707
    • 等级:
    • 排名:千里之外
    • 原创:58篇
    • 转载:44篇
    • 译文:1篇
    • 评论:0条