116. Populating Next Right Pointers in Each Node
Given a binary tree
struct TreeLinkNode {
TreeLinkNode *left;
TreeLinkNode *right;
TreeLinkNode *next;
}
Populate each next pointer to point to its next right node. If there is no next right node, the next pointer should be set toNULL
.
Initially, all next pointers are set toNULL
.
Note:
- You may only use constant extra space.
- You may assume that it is a perfect binary tree (ie, all leaves are at the same level, and every parent has two children).
For example,
Given the following perfect binary tree,
1
/ \
2 3
/ \ / \
4 5 6 7
After calling your function, the tree should look like:
1 -> NULL
/ \
2 -> 3 -> NULL
/ \ / \
4->5->6->7 -> NULL
Solution:
keep track of parent node,
- parent.left.next = parent.right
- parent.right.next = parent.next.left (parent.next != null)
public class Solution {
public void connect(TreeLinkNode root) {
if(root == null){
return;
}
TreeLinkNode curr = root;
TreeLinkNode prev = null;
while(curr.left != null){
prev = curr;
while(prev != null){
prev.left.next = prev.right;
if(prev.next != null){
prev.right.next = prev.next.left;
}
prev = prev.next;
}
curr = curr.left;
}
}