码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode: Populating Next Right Pointers in Each Node II [117]

时间:2014-06-08 15:46:22      阅读:303      评论:0      收藏:0      [点我收藏+]

标签:leetcode   算法   面试   

【题目】

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

【题意】

    给定一棵二叉树,要求每层上的节点链接起来。
    与Populating Next Right Pointers in Each Node不同的是,本题输入的二叉树不一定是完整二叉树


【思路】


    与Populating Next Right Pointers in Each Node思路以及方法完全相同,代码可以直接移植求解。


【代码】

/**
 * 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==NULL)return;
        TreeLinkNode*prev;
        TreeLinkNode*cur;
        queue<TreeLinkNode*>q1;
        queue<TreeLinkNode*>q2;
        q1.push(root);
        while(!q1.empty() || !q2.empty()){
            prev=NULL;
            if(!q1.empty()){
                while(!q1.empty()){
                    cur=q1.front(); q1.pop();
                    if(prev)prev->next=cur;
                    prev=cur;
                    //把下层节点保存到q2
                    if(cur->left)q2.push(cur->left);
                    if(cur->right)q2.push(cur->right);
                }
                cur->next=NULL;
               
            }
            else{
                while(!q2.empty()){
                    cur=q2.front(); q2.pop();
                    if(prev)prev->next=cur;
                    prev=cur;
                    //把下层节点保存到q1
                    if(cur->left)q1.push(cur->left);
                    if(cur->right)q1.push(cur->right);
                }
                cur->next=NULL;
            }
        }
    }
};


LeetCode: Populating Next Right Pointers in Each Node II [117],布布扣,bubuko.com

LeetCode: Populating Next Right Pointers in Each Node II [117]

标签:leetcode   算法   面试   

原文地址:http://blog.csdn.net/harryhuang1990/article/details/28849661

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!