前序和中序建数
int Findvalue(char *is,Elemtype p,int n)
{
for(int i = 0;i < n;++i)
{
if(is[i] == p)
return i;
}
return -1;
}
//根据前序和中序建立一个二叉树
BtNode *CreatePM(char *pr,char *is,int n)
{
Elemtype p = pr[0];
BtNode *tmp = NULL;
if(n > 0)
{
int m = Findvalue(is,p,n);
if(-1 == m) exit(1);
tmp = BuyNode();
tmp->data = p;
tmp->leftchild = CreatePM(pr+1,is,m);
tmp->rightchild = CreatePM(pr+m+1,is+m+1,n-m-1);
}
return tmp;
}
BtNode *CreatetreePM(char *pr,char *is,int n)
{
if(pr == NULL || is == NULL || n < 1) return NULL;
return CreatePM(pr,is,n);
}
用中序和后序建数
BtNode *CreateML(char *mi,char *la,int n)
{
Elemtype p = la[n-1];
BtNode *tmp = NULL;
if(n > 0)
{
int m = Findvalue(mi,p,n);
if(-1 == m) exit(1);
tmp = BuyNode();
tmp->data = p;
tmp->leftchild = CreateML(mi,la,m);
tmp->rightchild = CreateML(mi+m+1,la+m,n-m-1);
}
return tmp;
}
BtNode *CreatetreeML(char *mi,char *la,int n)
{
if(mi == NULL || la == NULL || n < 1) return NULL;
return CreateML(mi,la,n);
}