【LeetCode OJ】Populating Next Right Pointers in Nod


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
    /**
     * 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) {
    		if(root == null)return;
    		Queue<TreeLinkNode> q = new LinkedList<TreeLinkNode>();
    		q.add(root);
    		int n = 0;
    		TreeLinkNode temp,head = new TreeLinkNode(0);
    		while(!q.isEmpty()){
    			temp = q.poll();
    			if(temp.left != null){
    				if(q.size() == Math.pow(2, n) - 1){
    					++n;
    					root.next = null;
    					head = temp.left;
    					head.next = temp.right;
    					head = temp.right;
    				}else{
    					head.next = temp.left;
    					temp.left.next = temp.right;
    					head = temp.right;
    				}
    				q.add(temp.left);
    				q.add(temp.right);
    			}
    		}        
        }
    }