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

    Follow up for problem "Populating Next Right Pointers in Each Node".

    What if the given tree could be any binary tree? Would your previous solution still work?

    Note:

    • You may only use constant extra space.

    For example,
    Given the following binary tree,

             1
           /  
          2    3
         /     
        4   5    7
    

    After calling your function, the tree should look like:

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

    Discuss

    /**
     * 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) 
        {
            if(!root)
                return ;
            queue<TreeLinkNode*> qu;
            TreeLinkNode *te;
            int cntb = 0;
            int cnta = 0;
            qu.push(root);
            cntb = 1;
            while(!qu.empty())
            {
                te = qu.front();
                qu.pop();
                cntb--;
                if(cntb == 0)
                {
                    te->next = NULL;
                    if(te->left)
                    {
                        qu.push(te->left);
                        cnta++;
                    }
                     if(te->right)
                    {
                        qu.push(te->right);
                        cnta++;
                    }
                    cntb = cnta;
                    cnta = 0;
                    continue;
                }
                else
                    te->next = qu.front();
                if(te->left)
                {
                    qu.push(te->left);
                    cnta++;
                }
                if(te->right)
                {
                    qu.push(te->right);
                    cnta++;
                }
                
            }
        }
    };

    有了上一次的基础, 一次AC应该没问题
    注意的是:
    queue
    pop()出队
    push(obj);入队
    empty();
    front(); 是队首, 是最先入队的那个.
    也就是说, queue是尾进头出
    back();同理
    还有一个size();
    每天早上叫醒你的不是闹钟,而是心中的梦~
  • 相关阅读:
    CentOS下crond定时任务详细介绍
    js随机从数组中取出几个元素
    js复制内容加版权声明代码
    crond不执行原因分析
    2015年最全的移动WEB前端UI框架
    聊聊前端排序的那些事
    Linux下修改Mysql的用户(root)的密码
    SIPp常用脚本之三:UAC
    SIPp常用脚本之二:UAS
    SIPp常用脚本之一:register注册
  • 原文地址:https://www.cnblogs.com/vintion/p/4116979.html
Copyright © 2011-2022 走看看