#include<iostream>
#include<iomanip>
#include<list>
#include<cmath>
#include<vector>
#include<assert.h>
#include"Test.h"
using namespace std;
struct Node
{
int data;
Node *left;
Node *right;
};
int pre[]={1,2,4,7,3,5,6,8};
int mid[]={4,7,2,1,5,3,8,6};
Node *f(int pre[],int a,int b,int mid[],int m,int n)
{
if(b-a+1!=n-m+1)
throw std::exception("Invalid input!");
if(a>b||m>n)
return NULL;
int i;
Node *p=NULL;
for(i=m;i<=n;i++)
{
if(mid[i]==pre[a])
{
p=new Node();
p->data=mid[i];
p->left=f(pre,a+1,a+i-m,mid,m,i-1);
p->right=f(pre,a+i-m+1,b,mid,i+1,n);
return p;
}
}
throw std::exception("Invalid input!");
}
Node *Construct(int pre[],int m,int mid[],int n)
{
if(pre==NULL||mid==NULL||m!=n||m<0)
throw std::exception("Invalid Input");
return f(pre,0,m-1,mid,0,n-1);
}
Node *t;
void main()
{
try
{
t=Construct(pre,8,mid,8);
}
catch(std::exception e)
{
cout<<e.what()<<endl;
}
int a;
system("pause");
}