Follow up for problem "Populating Next Right Pointers in Each Node".
What if the given tree could be any binary tree? Would your previous solution still work?
Note:
- You may only use constant extra space.
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
Analysis:
与上一题类似,唯一的不同是每次要先找到一个第一个有效的next链接节点,并且递归的时候要先处理右子树,再处理左子树.
Java
public void connect(TreeLinkNode root) {if(root ==null) return;TreeLinkNode p = root.next;while(p!=null){if(p.left!=null){p = p.left;break;}if(p.right!=null){p = p.right;break;}p = p.next;}if(root.right!=null)root.right.next = p;if(root.left!=null)root.left.next = root.right != null ? root.right:p;connect(root.right);connect(root.left);}
c++
void connect(TreeLinkNode *root) {if(root == NULL) return;TreeLinkNode *p = root->next;while(p != NULL){if(p->left != NULL){p = p->left;break;}if(p->right != NULL){p = p->right;break;}p = p->next;}if(root->right != NULL){root->right->next = p;}if(root->left != NULL){root->left->next = root->right ? root->right : p;}connect(root->right);connect(root->left);}