LeetCode 第117題 填充每個節點的下一個右側節點指針||
阿新 • • 發佈:2019-03-10
pre 填充 src node return lee null != 給定
給定一個二叉樹
struct Node {
int val;
Node *left;
Node *right;
Node *next;
}
填充它的每個 next 指針,讓這個指針指向其下一個右側節點。如果找不到下一個右側節點,則將 next 指針設置為 NULL
。
初始狀態下,所有 next 指針都被設置為 NULL
。
示例:
1 class Solution117 {
2
3 public Node connect(Node root) {
4 if (root == null) {
5 return null;
6 }
7
8 //node直接走到root的右兄弟處(根結點時,直接為null)
9 Node node = root.next;
10
11 //找到root的 右兄弟 中從左往右第一個不為空的孩子結點(如果沒有,則找下一個右兄弟,直到沒有右兄弟為止->null)
12 while (node != null) {
13 if (node.left != null) {
14 node = node.left;
15 break;
16 } else if (node.right != null) {
17 node = node.right;
18 break;
19 } else {
20 node = node.next;
21 }
22 }
23
24 //如果左孩子不為空,就要替他找一個伴侶. 向右看第一個不為空的孩子.(右孩子 | 上一步中找到的左往右第一個不為空的孩子結點
25 if (root.left != null) {
26 root.left.next = (root.right == null ? node : root.right);
27 }
28
29 //如果右孩子不為空,也要替他找一個伴侶. 即上一步中找到的左往右第一個不為空的孩子結點
30 if (root.right != null) {
31 root.right.next = node;
32 }
33
34 //先掃描右孩子再掃描左孩子.
35 connect(root.right);
36 connect(root.left);
37
38 return root;
39 }
40
41 }
LeetCode 第117題 填充每個節點的下一個右側節點指針||