数据结构上机测试4.1:二叉树的遍历与应用1
Time Limit: 1000MS Memory limit: 65536K
题目描述
输入二叉树的先序遍历序列和中序遍历序列,输出该二叉树的后序遍历序列。
输入
第一行输入二叉树的先序遍历序列;
第二行输入二叉树的中序遍历序列。
第二行输入二叉树的中序遍历序列。
输出
输出该二叉树的后序遍历序列。
示例输入
ABDCEF BDAECF
示例输出
DBEFCA
#include<stdio.h>
#include<string.h>
#include<malloc.h>
struct node
{
char data;
struct node *lchild,*rchild;
};
void Bian(struct node *p)
{
if(p->lchild!=NULL)
Bian(p->lchild);
if(p->rchild!=NULL)
Bian(p->rchild);
printf("%c",p->data);
} //输出后序遍历序列
struct node*buildtree(struct node *p,char *pre,char*mid,int n)
{
if(n<=0)
return NULL;
p=(struct node*)malloc(sizeof(struct node));
p->data=pre[0]; //让头指针指向根
int q=strchr(mid,pre[0])-mid; //求出左子树的长度
p->lchild=buildtree(p->lchild,pre+1,mid,q);
p->rchild=buildtree(p->rchild,pre+q+1,mid+q+1,n-q-1);
return p;
}//根据先序和中序建树
int main()
{
char pre[1001],mid[1001];
gets(pre);
gets(mid);
int n=strlen(pre);
struct node *root;
root=buildtree(root,pre,mid,n);
Bian(root);
printf("\n");
return 0;
}