leetcode 117. 填充每個節點的下一個右側節點指針 II(Populating Next Right Pointers in Each Node II)
阿新 • • 發佈:2019-05-08
常量 設置 public ref etc 圖片 lee nec 一個
目錄
- 題目描述:
- 示例:
- 解法:
題目描述:
給定一個二叉樹
struct Node {
int val;
Node left;
Node right;
Node *next;
}
填充它的每個 next 指針,讓這個指針指向其下一個右側節點。如果找不到下一個右側節點,則將 next 指針設置為 NULL
。
初始狀態下,所有 next 指針都被設置為 NULL
。
示例:
輸入:{"$id":"1","left":{"$id":"2","left":{"$id":"3","left":null,"next":null,"right":null,"val":4},"next":null,"right":{"$id":"4","left":null,"next":null,"right":null,"val":5},"val":2},"next":null,"right":{"$id":"5","left":null,"next":null,"right":{"$id":"6","left":null,"next":null,"right":null,"val":7},"val":3},"val":1} 輸出:{"$id":"1","left":{"$id":"2","left":{"$id":"3","left":null,"next":{"$id":"4","left":null,"next":{"$id":"5","left":null,"next":null,"right":null,"val":7},"right":null,"val":5},"right":null,"val":4},"next":{"$id":"6","left":null,"next":null,"right":{"$ref":"5"},"val":3},"right":{"$ref":"4"},"val":2},"next":null,"right":{"$ref":"6"},"val":1} 解釋:給定二叉樹如圖 A 所示,你的函數應該填充它的每個 next 指針,以指向其下一個右側節點,如圖 B 所示。
提示:
- 你只能使用常量級額外空間。
- 使用遞歸解題也符合要求,本題中遞歸程序占用的棧空間不算做額外的空間復雜度。
解法:
/* // Definition for a Node. class Node { public: int val; Node* left; Node* right; Node* next; Node() {} Node(int _val, Node* _left, Node* _right, Node* _next) { val = _val; left = _left; right = _right; next = _next; } }; */ class Solution { public: Node* connect(Node* root) { if(root == NULL){ return root; }else{ Node* head = root; Node* pre = NULL; Node* cur = head; while(head){ cur = head; head = NULL; pre = NULL; while(cur){ if(cur->left){ if(head == NULL){ head = cur->left; } cur->left->next = cur->right; if(pre == NULL){ pre = cur->left; }else{ pre->next = cur->left; pre = cur->left; } } if(cur->right){ if(head == NULL){ head = cur->right; } if(pre == NULL){ pre = cur->right; }else{ pre->next = cur->right; pre = cur->right; } } cur = cur->next; } } return root; } } };
leetcode 117. 填充每個節點的下一個右側節點指針 II(Populating Next Right Pointers in Each Node II)