leetcode || 117、Populating Next Right Pointers in Each Node II

problem:

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

Hide Tags
  Tree Depth-first Search
题意:是上一题的普适版,不要求满树!每层节点链接起来,类似B*树 

thinking:

(1)上一题说过,采用BFS 而不是DFS:http://blog.youkuaiyun.com/hustyangju/article/details/45242365

(2)采用queue结构存储每层的结点

code:

class Solution {
public:
    void connect(TreeLinkNode *root) {
        if(root==NULL)
            return;
        queue<TreeLinkNode*> queue0;
        queue0.push(root);
        level_visit(queue0);
        return;
    }
protected:
    void level_visit(queue<TreeLinkNode*> queue1)
    {
        if(queue1.empty())
            return;
        queue<TreeLinkNode*> queue2=queue1;
        queue<TreeLinkNode*> queue3;
        TreeLinkNode *tmp=queue1.front();
        queue1.pop();
        tmp->next=NULL;
        while(!queue1.empty())
        {
            TreeLinkNode *tmp2=queue1.front();
            queue1.pop();
            tmp2->next=NULL;
            tmp->next=tmp2;
            tmp=tmp2;
        }
        while(!queue2.empty())
        {
            TreeLinkNode *node=queue2.front();
            queue2.pop();
            if(node->left!=NULL)
                queue3.push(node->left);
            if(node->right!=NULL)
                queue3.push(node->right);  
        }
        level_visit(queue3);
    }

};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值