先序+中序创建二叉树
根据先序中序创建二叉树
树结构体
typedef struct node
{
char data;
struct node *lchild;
struct node *rchild;
}BTnode;
完整代码
#include<bits/stdc++.h>
using namespace std;
#define max 100
typedef struct node
{
char data;
struct node *lchild;
struct node *rchild;
}BTnode;
BTnode * CreateBT(char *pre,char *in,int n)
{
BTnode *b;
char *p;
if(n<=0)
return NULL;
b=(BTnode *)malloc(sizeof(BTnode));
b->data=*pre;
for(p=in;p<in+n;p++)
if(*pre==*p)
break;
int k=p-in;
b->lchild=CreateBT(pre+1,in,k);
b->rchild=CreateBT(pre+k+1,p+1,n-k-1);
return b;
}
void DispBTree(BTnode *b)
{
if(b!=NULL)
{
printf("%c",b->data);
if(b->lchild!=NULL||b->rchild!=NULL)
{
printf("(");
DispBTree(b->lchild);
if(b->rchild!=NULL)
printf(",");
DispBTree(b->rchild);
printf(")");
}
}
}
int main()
{
char pre[max],in[max];
BTnode *bb;
scanf("%s",pre);
getchar();
scanf("%s",in);
int n=strlen(pre);
bb=CreateBT(pre,in,n);
DispBTree(bb);
}
测试样例
A(B(D(E,G)),C(,F))
ABDEGCF
EDGBACF