由二叉树的两个遍历序列求另一个遍历序列
来源:互联网 发布:淘宝店铺经营范围 编辑:程序博客网 时间:2024/05/20 19:19
二叉树的重要的遍历序列有三种:先序遍历,中序遍历,后序遍历。其中中序遍历可以由其他两种遍历序列定位的根来划分出左右两棵子树,所以已知的两种遍历序列中必须有中序遍历。
示意图(先序+中序->后序)
对于先序遍历序列,树根一定是第一个元素(后序遍历的根则是最后一个),知道树根后在中序遍历中找到树根,则根前面的就是左子树,后面的就是右子树,再递归的对左右子树执行上述操作直到序列为空,输出序列就是另一种序列。对于求先序序列,每次都是找到树根就输出,而求后序序列时是先递归处理完左右子树后再输出根。
代码:
输入中序和后序,求先序
输入:
DBKFIAHEJCG
DKIFBHJEGCA
输出:
ABDFKICEHJG
#include<cstdio>#include<cstring>#include<iostream>#define MAXN 150using namespace std;char in[MAXN],post[MAXN];void make_pre(char *a,char *b,int len){cout<<b[len-1];int le1 = 0,le2 = 0;for(int i = 0;i < len;i ++,le1 ++)if(a[i] == b[len-1])break;le2 = len - le1 - 1;if(le1 > 0)make_pre(a,b,le1);if(le2 > 0)make_pre(&a[le1+1],&b[le1],le2);}int main(){freopen("./tree_trans.in" , "r" , stdin);cin>>in>>post;make_pre(in,post,strlen(in));return 0;}
输入中序和先序,求后序
输入:
DBKFIAHEJCG
ABDFKICEHJG
输出:
DKIFBHJEGCA
#include<cstdio>#include<cstring>#include<iostream>#define MAXN 150using namespace std;char in[MAXN],pre[MAXN];void make_post(char *a,char *b,int len){int le1 = 0,le2 = 0;for(int i = 0;i < len;i ++,le1 ++)if(a[i] == b[0])break;le2 = len - le1 - 1;if(le1 > 0)make_post(a,&b[1],le1);if(le2 > 0)make_post(&a[le1+1],&b[le1+1],le2);cout<<b[0];}int main(){freopen("./tree_trans.in" , "r" , stdin);cin>>in>>pre;make_post(in,pre,strlen(in));return 0;}
0 0
- 由二叉树的两个遍历序列求另一个遍历序列
- 由二叉树的前序遍历序列和中序遍历序列求后序遍历序列
- 由二叉树的遍历序列恢复二叉树
- 由遍历序列得到二叉树
- 由遍历序列构造二叉树
- 由遍历序列构造二叉树
- 由遍历序列还原二叉树结构
- 由遍历序列构造二叉树
- 由遍历序列构造二叉树
- 由已知的层次遍历序列构建二叉树
- 求二叉树的先序遍历序列
- 由前序遍历序列跟中序遍历序列生成二叉树,如果输入序列不正确返回fail~ 如果正确则前序遍历创建的二叉树
- 已知前序遍历序列和中序遍历序列,求二叉树的后序遍历
- 根据二叉树的前序遍历序列和中序遍历序列求二叉树的后序遍历序列
- 由中序遍历序列和后序遍历序列构造二叉树(递归实现)
- 由前序遍历序列和中序遍历序列重建二叉树
- 由中序遍历序列和后续遍历序列恢复二叉树
- 已知某二叉树的某两种遍历序列,求另一种遍历序列面试题解法总结(转)
- 电商 Fab 或将进行新一轮大规模裁员
- qt中xml文件的简单读取
- 一个关于选择的小问题
- 简单的网页效果
- Android之Adapter用法总结
- 由二叉树的两个遍历序列求另一个遍历序列
- boost的shared_ptr循环引用
- ZOJ-1082
- eclipse maven plugin 插件 安装 和 配置
- 建立完整游戏AI实践之1
- 黑马程序员_阶段练习&访问修饰符
- IOS学习之斯坦福大学 IOS开发课程笔记(第一课)
- ios里面block函数
- hdu-1010-Tempter of the Bone