中心思想:
利用先序序列知道每个部分根结点、左子树和右子树,再利用中序序列进行递归
如:先序序列abxxcxx 中序序列bxxacxx
根结点a 左子树bxx 右子树cxx
#include <iostream>
#include <string.h>
#define type char
using namespace std;
typedef struct tree
{ type data; //结点数据
tree *l,*r; //左结点、右结点
}btree; //数据类型别名
btree *create(type *pre,type *mid,int len)
{
if(len<=0) return NULL;
btree *p=new btree;
p->data=*pre;
int index,i;
for(i=0;i<len;i++)
if(*pre==mid[i]) index=i; //找到先序序列根结点在中序序列中的索引
p->l=create(pre+1,mid,index); //切到中序序列根结点前,创建左子树
p->r=create(pre+index+1,mid+index+1,len-index-1); //切到根结点后,创建右子树
return p;
}
int main()
{
type *pre=new type[105];
type *mid=new type[105];
cin>>pre>>mid; //输入先序、中序遍历序列
btree *root=create(pre,mid,strlen(mid)); //建二叉树
return 0;
}