二叉树--已知前序遍历和中序遍历,输出后续遍历
2012-04-02 20:44
330 查看
原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7422336
已知某二叉树的先序序列和中序序列,编程计算并输出该二叉树的后序序列。
输入说明:仅一组数据,分为两行输入,第一行表示指定二叉树的先序序列,第二行表示该二叉树的中序序列,序列元素均为大写英文字符,表示二叉树的结点。
输出说明:在一行上输出该二叉树的后序序列。
输入样本:
ABDGCEFH
DGBAECHF
输出样本:
GDBEHFCA
简单 源码如下:
已知某二叉树的先序序列和中序序列,编程计算并输出该二叉树的后序序列。
输入说明:仅一组数据,分为两行输入,第一行表示指定二叉树的先序序列,第二行表示该二叉树的中序序列,序列元素均为大写英文字符,表示二叉树的结点。
输出说明:在一行上输出该二叉树的后序序列。
输入样本:
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; }
相关文章推荐
- 已知一颗二叉树S的前序遍历和中序遍历 序列,请编程输出二叉树S的后续遍历序列.
- 二叉树--已知前序遍历和中序遍历,输出后续遍历
- 已知一颗二叉树S的前序遍历和中序遍历序列,请编程输出二叉树S的后续遍历序列。
- 通过前序遍历和中序遍历重建二叉树以及输出后序遍历(Java实现)
- 已知二叉树的前序遍历和中序遍历,如何得到它的后序遍历?
- 已知二叉树的前序/后序遍历和中序遍历,求后序/前序遍历
- 已知二叉树的先序遍历序列和中序遍历序列,输出该二叉树的后序遍历序列
- 已知二叉树的前序遍历和中序遍历的结果,重建二叉树
- 已知二叉树的中序和后序遍历排列,求前序遍历
- 由前序遍历和中序遍历重建二叉树,再实现后续遍历
- 已知二叉树的先序遍历序列和中序遍历序列,输出该二叉树的后序遍历序列
- 已知二叉树的前序/后序遍历和中序遍历,求后序/前序遍历
- 已知二叉树的前序遍历和中序遍历,如何得到它的后序遍历?
- 已知二叉树的后序/前序遍历和中序遍历,求前序/中序遍历
- 已知二叉树的先序遍历序列和中序遍历序列,输出该二叉树的后序遍历序列
- 已知前序遍历和中序遍历,重建二叉树
- 已知二叉树的前序遍历和中序遍历,如何得到它的后序遍历?
- 计算机技术——已知二叉树的前序遍历和中序遍历,如何得到它的后序遍历?
- 已知二叉树的前序遍历和中序遍历重建二叉树(二叉树)
- 已知二叉树的前序/后序遍历和中序遍历,求后序/前序遍历