LeetCode:Populating Next Right Pointers in Each Node I,II 編程之美3.10

解答:

        隊列實現按排遍歷

class Solution {
public:
struct InvoLevelNode 
{
    TreeLinkNode *node;
    int level;
    InvoLevelNode(TreeLinkNode *p,int n):node(p),level(n){}
    InvoLevelNode(){}//重定義構造函數時,一定要把程序裏面出現情況全部構造完全
};
    void connect(TreeLinkNode *root) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        if(root ==NULL)return ;
        deque<InvoLevelNode>L;
        int level = 1;
        InvoLevelNode p,q;
        L.push_back(InvoLevelNode(root,1));
        while(L.size())
        {
            p = L.front();
            L.pop_front();
            if(p.node->left)
               L.push_back(InvoLevelNode(p.node->left,p.level+1));
            if(p.node->right)
               L.push_back(InvoLevelNode(p.node->right,p.level+1));
            if(L.size())
                q= L.front();
            else
            {
                p.node->next = NULL;
                continue;
            }
            if(p.level == q.level)
               p.node->next = q.node;
            else
               p.node->next = NULL;
        }
        
        
        
    }
};

查看編程之美 3.10 分層遍歷二叉樹感覺代碼更好點 如下

class Solution {
public:
    void connect(TreeLinkNode *root) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        if(root==NULL)return;
        vector<TreeLinkNode*> V;
        TreeLinkNode* node;
        int last = 1;
        int nowp = 0;
        V.push_back(root);
        while(last!= nowp)
        {
            node = V[nowp];
            if(node->left)             //這個要在last更新之前做
               V.push_back(node->left);
            if(node->right)
               V.push_back(node->right);
            if(nowp == last - 1 )
            {
               node->next = NULL;   
               last = V.size();//遍歷完一層,新壓入的只有可能是下一層的元素
            }
            else
            {
                node->next = V[nowp+1];
            }
           
            nowp++;
        }
    }
};


發佈了23 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章