二叉树的节点为:
struct BiTNode
{
TElemType data;
struct BiTNode *leftchild,*rightchild;
};
创建节点统一由Buynode() 函数完成:
BiTNode * Buynode()
{
BiTNode *s=new BiTNode();
if(s == NULL)
{
exit(1);
}
memset(s,0,sizeof(BiTNode));
return s;
}
一,由前序和中序遍历的字符串创建二叉树,返回二叉树头指针。
BiTNode * PreInCreateTree(char *s1,char *s2,int n) //n标识s2的长度
{
if(n == 0)
{
return NULL;
}
int i=0;
while(*s1 != s2[i])
{
++i;
}
BiTNode *h=Buynode();
h->data=*s1;
h->leftchild=PreInCreateTree(s1+1,s2,i);
h->rightchild=PreInCreateTree(s1+i+1,s2+i+1,n-i-1);
return h;
}
二,由中序和后序遍历的字符串创建二叉树,返回二叉树头指针。
BiTNode * InPostCreateTree(char *s1,char *s2,int n)
{
if(n == 0)
{
return NULL;
}
int i=n-1;
while(s2[n-1] != s1[i])
{
--i;
}
BiTNode *h=Buynode();
h->data=s2[n-1];
h->leftchild=InPostCreateTree(s1,s2,i);
h->rightchild=InPostCreateTree(s1+i+1,s2+i,n-i-1);
return h;
}
//时间原因在这里不做实现方法的解释
//测试用例
char *s1="ABCDEFGH";char *s2="CBEDFAGH";
char *s3="CEFDBHGA";