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

重建二叉树

时间:2016-03-16 22:43:58      阅读:409      评论:0      收藏:0      [点我收藏+]

标签:

     递归出错简直要人命啊!!!

    递归出口一定要小心,否则就会陷入无限循环中导致内存崩溃!!

    这题:第一:左右子树的范围要小心,一开始没有用leftlen,直接spre+rootin!诶~~,两者没有啥关系的

             第二:左右子树怎么判断停,单靠spre==epre &&sin==ein判断是不行的,它只能判断只有一个节点时。因为可能出现某个父节点只有左子树或者只有右子树,这两者都不会相等的,但却不能去找它没有的子树,所以要加上左右子树的判断。

            第三:两个函数的顺序!

class Solution {
public:
   struct TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> in) {
      if(pre.empty()||in.empty()) return NULL;
        int len=pre.size();
        if(in.size()!=len) return NULL;
        return construct(pre,0,len-1,in,0,len-1);
        
    } 
    struct TreeNode* construct(vector<int> pre,int spre,int epre,vector<int> in,int sin,int ein)
        {
            TreeNode* root=new TreeNode(pre[spre]);
            root->left=root->right=NULL;
           if(spre==epre &&sin==ein) return root;
            int rootin=0;
         while(in[rootin]!=pre[spre]) rootin++;
         int leftlen=rootin-sin;
         if(leftlen>0)
         root->left=construct(pre,spre+1,spre+leftlen,in,sin,rootin-1);
         if(epre-spre-leftlen>0)
         root->right=construct(pre,spre+1+leftlen,epre,in,rootin+1,ein);
         return root;          
       
    }
    
};

 

重建二叉树

标签:

原文地址:http://www.cnblogs.com/daocaorenblog/p/5285271.html

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