package tree; import java.util.ArrayDeque; import java.util.Queue; /** * Created by gouthamvidyapradhan on 07/07/2017. * *
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 to NULL. * *
Initially, all next pointers are set to NULL. * *
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: Perform a level order traversal using BFS, keep track of prev node at each level.
* Link the prev node to current node if both the nodes are in the same level.
*/
public class NextRightPointer {
private class LevelNode {
int level;
TreeLinkNode node;
LevelNode(TreeLinkNode node, int level) {
this.node = node;
this.level = level;
}
}
public static class TreeLinkNode {
int val;
TreeLinkNode left, right, next;
TreeLinkNode(int x) {
val = x;
}
}
public static void main(String[] args) throws Exception {
TreeLinkNode node = new TreeLinkNode(2);
node.left = new TreeLinkNode(1);
node.right = new TreeLinkNode(3);
new NextRightPointer().connect(node);
System.out.println(node.next);
System.out.println(node.left.next.val);
System.out.println(node.right.next);
}
public void connect(TreeLinkNode root) {
Queue