博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 2255 Tree Recovery
阅读量:7119 次
发布时间:2019-06-28

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

标题来源:

Tree Recovery
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 11649   Accepted: 7311

Description

Little Valentine liked playing with binary trees very much. Her favorite game was constructing randomly looking binary trees with capital letters in the nodes. 
This is an example of one of her creations: 
D                                              / \                                             /   \                                            B     E                                           / \     \                                          /   \     \                                         A     C     G                                                    /                                                   /                                                  F
To record her trees for future generations, she wrote down two strings for each tree: a preorder traversal (root, left subtree, right subtree) and an inorder traversal (left subtree, root, right subtree). For the tree drawn above the preorder traversal is DBACEGF and the inorder traversal is ABCDEFG. 
She thought that such a pair of strings would give enough information to reconstruct the tree later (but she never tried it). 
Now, years later, looking again at the strings, she realized that reconstructing the trees was indeed possible, but only because she never had used the same letter twice in the same tree. 
However, doing the reconstruction by hand, soon turned out to be tedious. 
So now she asks you to write a program that does the job for her! 

Input

The input will contain one or more test cases. 
Each test case consists of one line containing two strings preord and inord, representing the preorder traversal and inorder traversal of a binary tree. Both strings consist of unique capital letters. (Thus they are not longer than 26 characters.) 
Input is terminated by end of file. 

Output

For each test case, recover Valentine's binary tree and print one line containing the tree's postorder traversal (left subtree, right subtree, root).

Sample Input

DBACEGF ABCDEFGBCAD CBAD

Sample Output

ACBFGEDCDAB

Source

题意:

给出二叉树的前序和中序遍历,求后序遍历

题解:

依据三种遍历的特点

1.前序遍历: 根 左 右

2.中序遍历:左  根 右 

3.后序遍历:左 右  右

首先依据前序遍历确定根节点,然后再依据中序遍历确定左子树和右子树,然后再按此方法依次递归左子树和右子树并将根节点入栈。

最后,栈中保存的便是该树的后序遍历。

PS: 这题在半年前就看过,那个时候对树的遍历并不熟悉~~ 还不全然理解,也就不会打代码了~  今天中午又把这题翻出来。略微分析一下非常快就实现了。一次AC

AC代码:

#include
#include
using namespace std;int posmap[256];string pretree,midtree,posttree="";void init(){ posttree=""; for(int i=0;i
posmap[midtree[i]]){ Min=posmap[midtree[i]]; Mpos=i; } } postorder(left,Mpos); postorder(Mpos+1,right); posttree+=midtree[Mpos];}int main(){ while(cin>>pretree>>midtree) { init(); postorder(0,midtree.size()); cout<
<

转载地址:http://zgnel.baihongyu.com/

你可能感兴趣的文章
验证控件的使用
查看>>
会计中的冲销和红票
查看>>
开启和关闭HBase的thrift进程
查看>>
swift学习_xcode6搭建
查看>>
MVC
查看>>
(寻找第K小的数&amp;&amp;寻找第K小的数的和)
查看>>
UVa 642 - Word Amalgamation
查看>>
Linux下编译安装qemu和libvirt
查看>>
VS NuGet使用
查看>>
转载:margin外边距合并问题以及解决方式
查看>>
手机摇一摇功能音量大小跟系统音量一致
查看>>
mysql用一个表更新另一个表的方法
查看>>
一键安装 redmine on windows 和发邮件设置
查看>>
Gradle笔记——构建基础
查看>>
空间矢量数据(.shp文件)之JAVA操作
查看>>
Spring 学习 3- AOP
查看>>
Android 音频 OpenSL ES 录音 采集
查看>>
[Node.js] Provide req.locals data though middleware
查看>>
ASP.NET MVC Model绑定(五)
查看>>
Vijos P1448 校门外的树【多解,线段树,树状数组,括号序列法+暴力优化】
查看>>