根据前序、中序序列构建一棵二叉树

优质
小牛编辑
114浏览
2023-12-01
TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {

     int lengthpre=pre.size();
     int lengthvin=vin.size();
     if(lengthpre==0||lengthvin==0)   return nullptr;

      TreeNode *root=new TreeNode(pre[0]);  //创建节点


     //找到中序数组中的位置
      int inposition=0;
     for(int i=0;i<lengthvin;++i)
     {
         if(vin[i]==pre[0])
         {
             inposition=i;
             break;
         }
     }

     vector<int> preleft,preright,vinleft,vinright;

     for(int i=0;i<inposition;i++)
     {
        vinleft.push_back(vin[i]);
        preleft.push_back(pre[i+1]);
     }

     for(int i=inposition+1;i<lengthvin;++i)
     {
         vinright.push_back(vin[i]);
         preright.push_back(pre[i]);
     }


      root->left=reConstructBinaryTree(preleft,vinleft);
      root->right=reConstructBinaryTree(preright,vinright);

    return root;
    }