• 重建二叉树


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

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

        这题:第一:左右子树的范围要小心,一开始没有用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;          
           
        }
        
    };
  • 相关阅读:
    RDay2-Problem 2 B
    杭电 1862 EXCEL排序(sort+结构体)
    杭电 2803 The MAX(sort)
    杭电 5053 the Sum of Cube(求区间内的立方和)打表法
    杭电 2089 不要62
    杭电 4548 美素数(素数打表)
    杭电2098 分拆素数和
    杭电1722 Cake (分蛋糕)
    素数判定 (素数打表)
    最小公倍数
  • 原文地址:https://www.cnblogs.com/daocaorenblog/p/5285271.html
Copyright © 2020-2023  润新知