您的位置:首页 > 产品设计 > UI/UE

二叉树--已知前序遍历和中序遍历,输出后续遍历

2012-04-02 20:44 387 查看
原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7422336

已知某二叉树的先序序列和中序序列,编程计算并输出该二叉树的后序序列。
输入说明:仅一组数据,分为两行输入,第一行表示指定二叉树的先序序列,第二行表示该二叉树的中序序列,序列元素均为大写英文字符,表示二叉树的结点。
输出说明:在一行上输出该二叉树的后序序列。
输入样本:
ABDGCEFH
DGBAECHF
输出样本:
GDBEHFCA

简单 源码如下:
#include <stdio.h>
#include <string.h>
#define MAX 101
char preoder[MAX];
char inoder[MAX];
void build(int preleft,int preright,int inleft,int inright)
{
int i,lsize,rsize;
if(preleft <= preright && inleft <= inright)
{
for(i = inleft;i <= inright;i++)//在中序遍历中查找根结点
{
if(preoder[preleft] == inoder[i]) break;
}
lsize = i - inleft;
rsize = inright - i;

//递归创建左子树
if(lsize > 0) build(preleft + 1,preleft + lsize,inleft,i - 1);

//递归创建右子树
if(rsize > 0) build(preleft + 1 + lsize,preright,i + 1,inright);

//输出根结点
printf("%c",preoder[preleft]);
}
}
int main()
{
//freopen("input","r",stdin);

scanf("%s %s",preoder,inoder);

int psize,insize;
psize = strlen(preoder);
insize = strlen(inoder);

build(0,psize - 1,0,insize - 1);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  build input 编程 c
相关文章推荐