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/** Definition for binary tree with next pointer.
* public class TreeLinkNode {
* int val;
* TreeLinkNode left, right, next;
* TreeLinkNode(int x) { val = x; }
* }
*/
/*
Binary Tree Level Order Traversal Extension
*** only use constant extra space
so precious BFS with queue not working here
M1: BFS
Time:O(n) Space:O(1)
Runtime Error Message:
Line 54: java.lang.NullPointerException
Last executed input:
{7,-10,2,-4,3,-8,#,#,#,#,-1,11}
7
-10 2
-4 3 -8 #
## #-1 11
*/
public class Solution {
public void connect(TreeLinkNode root) {
/*BFS*/
if (root == null)
{
return;
}
TreeLinkNode head = root; // use TreeLinkNode next feature as a queue
TreeLinkNode newHead = null;
TreeLinkNode iterating = null;
int lastNum = 1;
int curNum = 0;
while ( head != null )
{
TreeLinkNode cur = head;
lastNum--;
if (cur.left != null)
{
if (curNum == 0)
{
newHead = cur.left;
iterating = newHead;
}
else
{
iterating.next = cur.left;
iterating = iterating.next;
}
curNum++;
}
if ( cur.right != null )
{
if ( curNum != 0 )
{
iterating.next = cur.right;
iterating = iterating.next;
}
// major difference from Populating Next Right Pointers in Each Node I
if(curNum == 0)
{
newHead = cur.right;
iterating = newHead;
}
curNum++;
}
if ( lastNum == 0 )
{
head = newHead;
lastNum = curNum;
curNum = 0;
newHead = null;
iterating = null;
}
else
{
head = head.next;
}
}
}
}
No comments:
Post a Comment