zoukankan      html  css  js  c++  java
  • LeetCode "Populating Next Right Pointers in Each Node II"

    Compared with I version, the tree could be incomplete. The only difference is that, we connect current node's child to next non-childrenless' node's first child.

    Still, we need calculate from right to left:

    class Solution {
    public:
        void connect(TreeLinkNode *p) {
            if (!p) return;
    
            if (p->right)
            {
                p->right->next = NULL;
                if (p->next)
                {
                    TreeLinkNode *pTmp = p->next;
                    while (pTmp)
                    {
                        if (pTmp->left || pTmp->right) break;
                        pTmp = pTmp->next;
                    }
                    if (pTmp)
                    {
                        if (pTmp->left) p->right->next = pTmp->left;
                        else if (pTmp->right) p->right->next = pTmp->right;
                    }
                }
            }
    
            if (p->left)
            {
                if (p->right)    p->left->next = p->right;
                else
                {
                    TreeLinkNode *pTmp = p->next;
                    while (pTmp)
                    {
                        if (pTmp->left || pTmp->right) break;
                        pTmp = pTmp->next;
                    }
                    if (pTmp)
                    {
                        if (pTmp->left) p->left->next = pTmp->left;
                        else if (pTmp->right) p->left->next = pTmp->right;
                    }
                }
            }
            connect(p->right);
            connect(p->left);
        }
    };
  • 相关阅读:
    ListActivity优点
    博客随笔
    第三周作业附加题之课外书读后感
    第3周作业。
    第三周作业
    读《弟弟》,笔记
    使用git将文件上传到Coding
    第二周作业
    第一周作业
    第零次作业
  • 原文地址:https://www.cnblogs.com/tonix/p/3870129.html
Copyright © 2011-2022 走看看