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();
posted @   海滨银枪小霸王  阅读(117)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示