首页 > 代码库 > [LeetCode] 117. Populating Next Right Pointers in Each Node II Java

[LeetCode] 117. Populating Next Right Pointers in Each Node II Java

题目:

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指针链接起来。和上一题不同的是这里是一棵随意的二叉树。这里可以使用一个节点保存每一层的第一个节点,然后遍历该层就行。具体看代码注释。
代码:
/**
 * 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) {
        while(root!=null){
            TreeLinkNode tempChild = new TreeLinkNode(0);       //记录下一层的首节点
            TreeLinkNode curChild = tempChild;
            while (root!=null){     //遍历某一层的节点,并将该层节点的子节点从左到右添加到下一层中去
                if(root.left!=null){
                    curChild.next=root.left;
                    curChild=curChild.next;
                }
                if(root.right!=null){
                    curChild.next=root.right;
                    curChild=curChild.next;
                }
                root = root.next;
            }
            root = tempChild.next;      //将下一层的首节点装载到root,遍历下一层
        }
    }
}

 

 

[LeetCode] 117. Populating Next Right Pointers in Each Node II Java