Code[vs]1013 求先序排列
来源:互联网 发布:windows操作系统界面 编辑:程序博客网 时间:2024/06/08 11:33
Description
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度<=8)。
输入描述 Input Description
两个字符串,分别是中序和后序(每行一个)
输出描述 Output Description
一个字符串,先序
样例输入 Sample Input
BADC
BDCA
样例输出 Sample Output
ABCD
数据范围及提示 Data Size & Hint
这道题就是裸裸的递归题目,可以用来复习数据结构的基础知识用,如果我们知道了一个二叉树的遍历方式有:1,先序,2.中序,3.后序,
这三个先后都是对于根节点来说的,也就是说,
如果先序遍历的话,输出顺序是这样的,根节点,左子树,右子树。
如果中序遍历的话,输出顺序是这样的,左子树,根节点,右子树
如果是后序遍历的话,输出顺序是这样的,左子树,右子数,根节点。
所以根据这个特点,对于后序遍历的根节点,我们可以做这样的处理,他的最后一个字符就是该二叉树的根节点root,
然后再找到中序遍历中,该字符所出现的位置,把中序遍历分成了两个部分,左边为左子树,右边为右子树
然后依次用这个方法不断的递归,直到该节点为叶子节点为止了~
代码:
# include<cstdio># include<iostream>using namespace std;void fun(string s1,string s2){ int m=s1.find(s2[s2.size()-1]); string str1,str2,str3,str4; str1.assign(s1,0,m); str2.assign(s1,m+1,s1.size()-m-1); str3.assign(s2,0,str1.size()); str4.assign(s2,str1.size(),str2.size()); cout<<s2[s2.size()-1]; if( str1.size()>=1 ) fun(str1,str3); if( str2.size()>=1 ) fun(str2,str4);}int main(void){ string s1,s2; while( cin>>s1>>s2 ) { fun(s1,s2); cout<<endl; } return 0;}
0 0
- Code[vs]1013 求先序排列
- CODE[VS] 1013 求先序排列
- CODE[VS]1013 求先序排列
- CODE[VS] 1294 全排列
- 【DFS】CODE[VS] 1294 全排列(刷题记录)
- code(vs)1294 全排列(dfs)
- VS Code
- VS Code
- VS Code
- VS Code
- VS Code
- vs code
- VS Code
- POJ1850 Code【全排列】
- 从零开始的暴搜复习生活—DFS(CODE[VS] 1116 四色问题 1294 全排列 1295 N皇后问题)
- Software architecture vs code
- Code[VS] 1212 最大公约数
- CODE[VS] 2597 团伙
- jquery hasClass/addClass/removeClass
- java中静态类,静态函数,静态变量
- Vim基础
- Swift 中的指针使用
- TabActivity
- Code[vs]1013 求先序排列
- 簡單SQL存儲過程實例
- leetcode oj Symmetric Tree
- 网络字节序
- ios-获取系统相簿里边的所有照片
- Nor和Nand的对比
- ubuntu 12.04下双网卡绑定实现负载和冗余
- -1的补码以及无符号32位输出4294967295
- QT数据库驱动和多国语言驱动部署注意事项