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
Note:
You may only use constant extra space.
[code]
public class Solution {
public void connect(TreeLinkNode root) {
helper(root, null);
}
void helper(TreeLinkNode node, TreeLinkNode parent)
{
if(node==null)return;
if(parent==null)node.next=null;
else if(node.next==null)
{
TreeLinkNode p=parent, q=node;
if(p.left==q && p.right!=null)
{
q.next=p.right;
q=q.next;
}
p=p.next;
while(p!=null)
{
if(p.left!=null)
{
q.next=p.left;
q=q.next;
if(p.right!=null)
{
q.next=p.right;
q=q.next;
}
}
else if(p.right!=null)
{
q.next=p.right;
q=q.next;
}
p=p.next;
}
q.next=null;
}
helper(node.left, node);
helper(node.right, node);
}
}
[Thoughts]
如果不做任何优化时间复杂度是 O( 1+(2+1)+(4+3+2+1)+(n/2+…+1) ) = O(n^3)