博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【树的遍历转换】American Heritage美国血统
阅读量:5334 次
发布时间:2019-06-15

本文共 982 字,大约阅读时间需要 3 分钟。

题目描述

农夫约翰非常认真地对待他的奶牛们的血统。然而他不是一个真正优秀的记帐员。他把他的奶牛们的家谱作成二叉树,并且把二叉树以更线性

的”树的中序遍历“和”树的前序遍历“的符号加以记录而不是用图形的方法。
你的任务是在被给予奶牛家谱的”树中序遍历“和”树前序遍历“的符号后,创建奶牛家谱的”树的后序遍历“的符号。每一头奶牛的姓名被
译为一个唯一的字母。(你可能已经知道你可以在知道树的两种遍历以后可以经常地重建这棵树。)显然,这里的树不会有多余26个的顶点。
这是在样例输入和样例输出中的树的图形表达方式:

                  C

                /   \

               /     \

              B       G

             / \         /

            A   D   H

               / \

              E   F

树的中序遍历是打印左子树,根和右子树。
树的前序遍历是打印根,左子树和右子树。
树的后序遍历是打印左子树,右子树和根。

输入

第一行:

树的中序遍历

第二行:

同样的树的前序遍历

输出

单独的一行表示该树的后序遍历。

样例输入

ABEDFCHGCBADEFGH

样例输出

AEFDBHGC

前序遍历第一个一定是根节点  

在中序遍历中找出根节点  左侧即为左子树中序遍历 右侧即为右子树中序遍历 

前序遍历搜一个子树一定是连续的  所以我们也可以找出哪一部分是左子树的前序遍历 哪一部分是右子树的前序遍历

递归处理即可

#include
#include
using namespace std;char a[505],b[505]; void bu(int ax,int ay,int bx,int by) {for(int i=bx;i<=by;i++) if(b[i]==a[ax]) {if(ax!=ay) {bu(ax+1,ax+i-bx,bx,i-1); bu(ax+i-bx+1,ay,i+1,by); } printf("%c",a[ax]); return; } } int main() { scanf("%s%s",b,a); bu(0,strlen(a)-1,0,strlen(b)-1); return 0;}

 

转载于:https://www.cnblogs.com/YuXiaoze/p/10679521.html

你可能感兴趣的文章
SQL Server用户权限详解
查看>>
Python正则表达式
查看>>
Linux进程间通信--命名管道
查看>>
UVa 10970 - Big Chocolate
查看>>
js输出
查看>>
set,env,export,set -x,set -e;
查看>>
H5多文本换行
查看>>
HAL层三类函数及其作用
查看>>
Odoo 去掉 恼人的 "上午"和"下午"
查看>>
web@h,c小总结
查看>>
java编程思想笔记(一)——面向对象导论
查看>>
Data Structure 基本概念
查看>>
Ubuntu改坏sudoers后无法使用sudo的解决办法
查看>>
NEYC 2017 游记
查看>>
[搬运] 写给 C# 开发人员的函数式编程
查看>>
Python之旅Day14 JQuery部分
查看>>
core--线程池
查看>>
redux-effect
查看>>
Swift和OC混编
查看>>
Android轻量级的开源缓存框架ASimpleCache
查看>>