洛谷oj 1030 水水水
来源:互联网 发布:linux内核源代码在哪 编辑:程序博客网 时间:2024/06/16 12:37
题目描述
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度<=8)。
输入输出格式
输入格式:
2行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。
输出格式:
1行,表示一棵二叉树的先序。
输入输出样例
输入样例#1:
BADC
BDCA
输出样例#1:
ABCD
这道题很水。。写了题解所以直接给代码,,,上面有注释 洛谷id:阮了个小哲,也可以去找题解。。。
#include<bits/stdc++.h>using namespace std;int wa[15],wb[15];//where a 和 where b 存的是每个字母在a/b上的位置 //然后用ascii 码把字母转成数字下标 其实可以用map 我比较勤奋QwQ char a[15],b[15];void gao(int l,int r,char rt)//搞 就是和先序便利的思维一样,先输出根节点在gao 左右 { if(l>r) return ;//不判会挂 可以模拟一下 cout<<rt;if(l==r) return ;int lr=100,rr=100; for(int i=wb[rt-'A'+1];i>=0;i--)//利用了后续遍历每科子树之前一个为其子树的根来找左右子树的根 { if(lr==100&&wa[b[i]-'A'+1]<wa[rt-'A'+1]) lr=i; if(rr==100&&wa[b[i]-'A'+1]>wa[rt-'A'+1]) rr=i; } if(rr==100) rr=lr;if(lr==100) lr=rr;//也是防止二叉树不满儿挂掉 gao(l,wa[rt-'A'+1]-1,b[lr]);gao(wa[rt-'A'+1]+1,r,b[rr]);//搞左右子树 }int main(){ cin>>a>>b; int al=strlen(a),bl=strlen(b); for(int i=0;i<al;i++) wa[a[i]-'A'+1]=i;//预处理位置 for(int i=0;i<bl;i++) wb[b[i]-'A'+1]=i; gao(0,al-1,b[bl-1]);}
1 0
- 洛谷oj 1030 水水水
- 洛谷OJ
- 洛谷OJ
- 洛谷oj
- 洛谷OJ
- 洛谷OJ
- 洛谷OJ
- 洛谷OJ
- 洛谷OJ
- 洛谷OJ
- 洛谷OJ
- 洛谷OJ
- 洛谷OJ
- 洛谷OJ
- 洛谷OJ
- 洛谷OJ
- 洛谷OJ
- 洛谷OJ
- R语言学习总结---数据操作
- could not execute query; SQL [select count(*) as col_0_0_ from order order0_]; nested exception is o
- Dungeon Master
- 【CNMP系列】CentOS7.0下安装PHP5.6.30服务
- KAFKA 编程
- 洛谷oj 1030 水水水
- C语言快速计算出一个无符号数一共有多少个“”1”位数的方法
- leetcode-33. Search in Rotated Sorted Array
- Cannot resolve com.mysq.jdbc.Connection.ping method. Will use 'SELECT 1' instead.
- CSS3的动画效果@keyframes
- map的用法
- 【CNMP系列】CentOS7.0下安装MySql5.6服务
- 王爽《汇编语言》课程设计二(只包含CMOS RAM操作不包含软盘操作)
- UML之我做分析与设计时常用到的2种图