[leetcode]Populating Next Right Pointers in Each Node II

         1
       /  \
      2    3
     / \    \
    4   5    7


         1 -> NULL
       /  \
      2 -> 3 -> NULL
     / \    \
    4-> 5 -> 7 -> NULL


用O(1)的空間

那就利用next節點,一層一層的來遍歷好了
首先是root,咱們把它的left和right連起來
而後root切換到下一層

而後遍歷下一層的每一個節點(由於next連了的
再分別把他們的left,right什麼的連起來

用兩個變量就ok了
一個prev記錄當前層前一節點是啥(用來鏈接的
一個next記錄下一層的開始(用戶切換到下一層

/**
 * 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* prev = nullptr;
        TreeLinkNode* next = nullptr;
        
        while(root) {
            prev = nullptr;
            next = nullptr;
            //if(next == nullptr) next = root->left ? root->left : root->right;
            for( ; root ; root = root->next) {
                if(next == nullptr) next = root->left ? root->left : root->right;
                if(root->left) {
                    if(prev) prev->next = root->left;
                    prev = root->left;
                }
                if(root->right) {
                    if(prev) prev->next = root->right;
                    prev = root->right;
                }
            }
            root = next;
        }
    }
};
 

註釋的那一句,開始一位原本是同樣的嘛,可是仔細一想,我第一個left多是空啊,當前層的第一個是葉子節點,可是他的兄弟不是啊spa

因此要寫到循環裏面,找到第一個有left或者right的節點,而後把left或者right(left優先)賦值給nextcode

相關文章
相關標籤/搜索