1. 程式人生 > >LeetCode 第117題 填充每個節點的下一個右側節點指針||

LeetCode 第117題 填充每個節點的下一個右側節點指針||

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題 填充每個節點的下一個右側節點指針||