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);
        }
    };
  • 相关阅读:
    迭代器生成器和协程函数
    装饰器
    对haproxy.conf文件的增删改查
    函数基础
    深入理解python字符编码
    python字符串列表字典常用方法
    委托的使用
    数据库连接
    输入输出流
    泛型集合的使用
  • 原文地址:https://www.cnblogs.com/tonix/p/3870129.html
Copyright © 2011-2022 走看看