算法竞赛入门经典 第六章 二叉树重建
2014-06-07 16:28
232 查看
输入一棵二叉树的先序遍历和中序遍历序列,输出它的后序遍历序列。
样例输入:
DBACEGF ABCDEFG
BCAD CBAD
样例输出 :
ACBFGED
CDAB
*p=strchr(s2,s1[0]); *p里边存的是在s2中第一次出现s1[0]的位置开始一直到s2字符串结束,
p=strchr(s2,s1[0])-s2; p里边存的是s1[0]在s2中的位置,是一个数。
样例输入:
DBACEGF ABCDEFG
BCAD CBAD
样例输出 :
ACBFGED
CDAB
*p=strchr(s2,s1[0]); *p里边存的是在s2中第一次出现s1[0]的位置开始一直到s2字符串结束,
p=strchr(s2,s1[0])-s2; p里边存的是s1[0]在s2中的位置,是一个数。
#include <stdio.h> #include <string.h> char s1[20],s2[20],ans[20]; void build(int n,char* s1,char*s2,char *s) { if(n<=0) return ; int p=strchr(s2,s1[0])-s2; //找到根结点在s2中的位置 build(p,s1+1,s2,s); //建立左子树的后序遍历 build(n-p-1,s1+p+1,s2+p+1,s+p);//建立右子树的后序遍历 s[n-1]=s1[0];//在最后的位置将根结点插入 }//整个遍历之后,一次递归将当前的根结点放在最后,递归完毕,后序遍历也就出来了。 int main (void) { int n,i; while(scanf("%s%s",s1,s2)!=EOF) //s1表示先序遍历,s2代表中序遍历 { n=strlen(s1); build(n,s1,s2,ans); //构造后序遍历 ans ='\0'; printf("%s\n",ans); //输出后序遍历 } return 0; }
相关文章推荐
- 算法竞赛入门经典:第六章 数据结构基础 6.9 根据二叉树的后序和中序确定前序序列
- 算法竞赛入门经典第六章
- 刘汝佳 算法竞赛-入门经典 第二部分 算法篇 第六章 1(Lists)
- 算法竞赛入门经典第6章例题(2):二叉树部分+四分树
- 算法竞赛入门经典:第六章 数据结构基础 6.3移动小球
- 算法竞赛入门经典:第六章 数据结构基础 6.10黑白图像
- 算法竞赛入门经典 第六章 黑白图像
- 算法竞赛入门经典:第六章 数据结构基础 6.5小球下落
- 算法竞赛入门经典:第六章 数据结构基础 6.14欧拉回路
- 【算法入门经典】6.3.3 二叉树重建【双十一大礼包】
- 算法竞赛入门经典第六章例题6-7 Trees on the level UVA - 122
- 刘汝佳 算法竞赛-入门经典 第二部分 算法篇 第六章 2(Binary Trees)
- 算法竞赛入门经典:第六章 数据结构基础 6.12迷宫路径
- 算法竞赛入门经典:第六章 数据结构基础 6.2铁轨
- 算法竞赛入门经典:第六章 数据结构基础 6.11迷宫
- 算法竞赛入门经典第六章例题6-3 Matrix Chain Multiplication UVA - 442
- 算法竞赛入门经典 第六章层次遍历
- 算法竞赛入门经典 例题9-1
- 算法竞赛入门经典 3.2 字符数组
- 算法竞赛入门经典 2.1 for 循环