原题链接在这里:https://leetcode.com/problems/populating-next-right-pointers-in-each-node-ii/
本题是Populating Next Right Pointers in Each Node的进阶版。关键是在有null的时候如何找到下一节点,通过while loop找到next节点,while loop 很关键。
Note: 1. 递归时先递归右子树,后递归左子树,否则会出错。
2. while loop中要加break, 否则会infinite loop.
AC Java:
/**
* 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;
}
TreeLinkNode next = null;
TreeLinkNode rootNext = root.next;
while(rootNext != null){
if(rootNext.left != null){
next = rootNext.left;
break;
}else if(rootNext.right != null){
next = rootNext.right;
break;
}else{
rootNext = rootNext.next;
}
}
if(root.right != null){
root.right.next = next;
}
if(root.left != null){
if(root.right != null){
root.left.next = root.right;
}else{
root.left.next = next;
}
}
connect(root.right);
connect(root.left);
}
}