//create bitree from pre traverse;
int i=0;
int create_from_preseq(Bitree *&root,int a[])
{
if(a[i]==-1)
{
root=NULL;i++;return 0;
}
else
{
root=(Bitree *)malloc(sizeof(Bitree));
root->data=a[i];i++;
create_from_preseq(root->left,a);
create_from_preseq(root->right,a);
}
}
Bitree * create_from_preseq1(int a[],int &i)
{ Bitree *root;
if(a[i]==-1)
{
i++;return NULL;
}
else
{
root=(Bitree *)malloc(sizeof(Bitree));
root->data=a[i];i++;
root->left = create_from_preseq1(a,i);
root->right= create_from_preseq1(a,i);
}
return root;
}
//create form sequnce storage
int create_from_seq(Bitree *&root,int a[],int i,int n)
{
if(i<n&&a[i]!=-1)
{
root=(Bitree *)malloc(sizeof(Bitree));
root->data=a[i];
root->left=NULL;root->right=NULL;
create_from_seq(root->left,a,2*i+1,n);
create_from_seq(root->right,a,2*i+2,n);
}
}
//create from pre and mid
int create_from_traverse(Bitree *&root,int pre[],int i,int mid[],int j,int n)
{ int k;
if(n<=0)
{root=NULL;
return 0;}
else
{
root=(Bitree *)malloc(sizeof(Bitree));
root->data=pre[i];
for(k=0;k<n;k++)
if(mid[j+k]==pre[i])
break;
create_from_traverse(root->left,pre,i+1,mid,j,k);
create_from_traverse(root->right,pre,i+k+1,mid,j+k+1,n-k-1);
}
}
Bitree * create_from_traverse1(int *pre, int *mid,int n)
{ int k;Bitree *root;
if(n<=0)
return NULL;
else
{
root=(Bitree *)malloc(sizeof(Bitree));
root->data=*pre;
for(k=0;k<n;k++)
if(*(mid+k)==*pre)
break;
root->left=create_from_traverse1(pre+1,mid,k);
root->right=create_from_traverse1(pre+k+1,mid+k+1,n-k-1);
return root;
}
}
//顺序存储,从0开始
int pre_travers_sq(int a[],int k,int n)
{
if(k<n&&a[k]!=-1)
{
printf("%2d ",a[k]);
pre_travers_sq(a,2*k+1,n);
pre_travers_sq(a,2*k+2,n);
}
}