题目:
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,遍历下一层 } } }