首页 > 其他 > 详细

[LeetCode] Populating Next Right Pointers in Each Node II

时间:2014-08-04 13:32:57      阅读:262      评论:0      收藏:0      [点我收藏+]

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
class Solution {
public:
    void connect(TreeLinkNode *root) {
        if(root==NULL)
            return;
        
        root->next = NULL;
        fun(root);
    }
private:
    TreeLinkNode *FindPleft(TreeLinkNode *&parent){
        TreeLinkNode *pleft =NULL;
        while(parent!=NULL){
            if(parent->left!=NULL){
                pleft = parent->left;
                break;
            }else if(parent->left==NULL && parent->right!=NULL){
               pleft = parent->right;
               break;
            }else{
               parent = parent->next;
               continue;
            }
        }//end while
        return pleft;
    }
    void fun(TreeLinkNode *parent){
        if(parent==NULL)
            return ;
        TreeLinkNode *pleft = FindPleft(parent);
        TreeLinkNode *pl;
        TreeLinkNode *nextLevelParent = pleft;
        while(parent!=NULL){
          if(pleft==parent->left &&parent->right!=NULL){
           pleft->next = parent->right;
           pleft = pleft->next;
        
          }else if((pleft!=NULL && pleft==parent->left && parent->right==NULL)||pleft==parent->right){
              parent = parent->next;
              if(parent==NULL||FindPleft(parent)==NULL){
                  pleft->next = NULL;
                  parent = nextLevelParent;
                  pl = FindPleft(parent);
                  pleft = pl;
                  nextLevelParent = pleft;
              }else{
                  pl = FindPleft(parent);
                  pleft->next = pl;
                  pleft = pl;
              }
          }//end if
                 
        }//end while
    }
};

 

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

[LeetCode] Populating Next Right Pointers in Each Node II

原文:http://www.cnblogs.com/Xylophone/p/3889542.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!