題目:spa
Follow up for problem "Populating Next Right Pointers in Each Node".code
What if the given tree could be any binary tree? Would your previous solution still work?blog
Note: 遞歸
- You may only use constant extra space.
For example,
Given the following binary tree,
io
1
/ \
2 3
/ \ \
4 5 7
After calling your function, the tree should look like:
function
1 -> NULL
/ \
2 -> 3 -> NULL
/ \ \
4-> 5 -> 7 -> NULL
題解:
這道題跟I的區別就是binary tree不是徹底二叉樹。
因此root.right.next就不必定等於root.next.left。
因此,目標就是先肯定好root的右孩子的第一個有效next鏈接點,而後再處理左孩子。
代碼以下:
1
public
void connect(TreeLinkNode root) {
2
if (root ==
null)
3
return;
4
5 TreeLinkNode p = root.next;
6
/*
7
所以,這道題目首要是找到右孩子的第一個有效的next連接節點,而後再處理左孩子。而後依次遞歸處理右孩子,左孩子
8
*/
9
while (p !=
null) {
10
if (p.left !=
null) {
11 p = p.left;
12
break;
13 }
14
if (p.right !=
null) {
15 p = p.right;
16
break;
17 }
18 p = p.next;
19 }
20
21
if (root.right !=
null) {
22 root.right.next = p;
23 }
24
25
if (root.left !=
null) {
26
if(root.right!=
null)
27 root.left.next = root.right;
28
else
29 root.left.next = p;
30 }
31
32 connect(root.right);
33 connect(root.left);
34 }