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
public class Solution {
public void connect(TreeLinkNode root) {
if(root != null){
root.next = null;
TreeLinkNode topLevel = root;
TreeLinkNode nextLevelHead = null;
TreeLinkNode node = null;
while(topLevel != null){
//looking for the head of next level
while(topLevel != null && nextLevelHead == null){
if(topLevel.left != null){
nextLevelHead = topLevel.left;
node = nextLevelHead;
}
if(topLevel.right != null){
if(node == null){
nextLevelHead = topLevel.right;
node = nextLevelHead;
}
else{
node.next = topLevel.right;
node = node.next;
}
}
topLevel = topLevel.next;
}
while(topLevel != null){
if(topLevel.left != null){
node.next = topLevel.left;
node = node.next;
}
if(topLevel.right != null){
node.next = topLevel.right;
node = node.next;
}
topLevel = topLevel.next;
}
if(node != null){
node.next = null;
node = node.next;
}
topLevel = nextLevelHead;
nextLevelHead = null;
}
}
}
}