zoukankan      html  css  js  c++  java
  • 重建二叉树

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

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

        这题:第一:左右子树的范围要小心,一开始没有用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;          
           
        }
        
    };
  • 相关阅读:
    推荐几个不错的console调试技巧
    JS字符串截取函数slice(),substring(),substr()的区别
    ES6入门基础
    setTimeout的小尴尬
    Javascript自定义事件功能与用法实例分析
    JavaScript中函数定义的三种方法
    数组方法
    数组选择排序
    数组冒泡排序
    this指向问题(1)
  • 原文地址:https://www.cnblogs.com/daocaorenblog/p/5285271.html
Copyright © 2011-2022 走看看