117. Populating Next Right Pointers in Each Node IIㄟˋ大
1.問題
將next指向右邊的node, 且tree不是perfect

2.想法
提問
確認題意: binary tree的類型, 若非perfect tree, 則無法確定left或right一定存在
function header, parameter
test input
說明想法
用一個虛擬節點pHead及指標pre
讓pHead->next指向該層的第一個node
如果root->left存在, 則讓pre->next移動到root->left
如果root->right存在, 則讓pre->next移動到root->right
當root->next存在, 則移動root到root->next
當root->next不存在時, 表示該層的node已經搜尋完, 則讓root移動到 pHead->next
測試計算複雜度
3.程式碼
/**
* Definition for binary tree with next pointer.
* struct TreeLinkNode {
* int val;
* TreeLinkNode *left, *right, *next;
* TreeLinkNode(int x) : val(x), left(NULL), right(NULL), next(NULL) {}
* };
*/
class Solution {
public:
void connect(TreeLinkNode *root) {
TreeLinkNode* pHead = new TreeLinkNode(0), *pre = pHead;
while (root) {
//連結同一層的節點
if (root->left) {
pre->next = root->left;
pre = pre->next;
}
if (root->right) {
pre->next = root->right;
pre = pre->next;
}
root = root->next;
//如果同一層搜完了
if (!root) {
root = pHead->next;
pre = pHead;
pHead->next = NULL;
}
}
}
};
Last updated