POJ - 2255 二叉树遍历
来源:互联网 发布:淘宝大魔王是真是假 编辑:程序博客网 时间:2024/06/08 04:25
Tree Recovery
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 7997 Accepted: 5079
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:
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!
D / \ / \ B E / \ \ / \ \ A C G / / FTo 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.
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
题意:已知二叉树的前序遍历和中序遍历,输出后序遍历。
前序遍历:根-->左孩子-->右孩子
中序遍历:左孩子-->根-->右孩子
后序遍历:左孩子-->右孩子-->根
所谓的前中后指的是根的位置,而左右孩子顺序是不变的。
例如已知前序遍历是DBACEGF,中序遍历是ABCDEFG,那么由前序遍历先根,可知道D是树的根,再看在中序遍历中D左边是ABC,所以可知道ABC一定在D的左子树上,而EFG在D的右子树上。
那么前序遍历为BAC,中序遍历为ABC,所以B为根,在中序遍历中A在B的左边,C在B的右边,所以A为B的左孩子,C为B的有孩子。
以此类推递归下去。
递归找到,代码很简单,但是要明白怎么递归:
1 #include<stdio.h> 2 #include<string.h> 3 void build(int n,char*s1,char*s2,char*s) 4 { 5 if(n<=0)return ; 6 int p=strchr(s2,s1[0])-s2; 7 8 //strchr(string , char )函数 9 //功能:查找字符串s2中首次出现字符s1[0]的位置10 //说明:返回首次出现s1[0]的位置的指针,如果s2中不存在c则返回NULL.11 12 build(p,s1+1,s2,s);13 build(n-p-1,s1+p+1,s2+p+1,s+p);14 //重建左子树和右子树15 s[n-1]=s1[0];16 //要得到后序遍历,所以整个的最后一个是根17 }18 int main()19 {20 char s1[30],s2[30],ans[30];21 memset(s1,0,sizeof(s1));22 memset(s2,0,sizeof(s2));23 while(scanf("%s %s",s1,s2)!=EOF)24 {25 int n=strlen(s1);26 build(n,s1,s2,ans);27 ans[n]='\0';28 printf("%s\n",ans);29 }30 return 0;31 }
0 0
- poj 2255 二叉树遍历
- POJ - 2255 二叉树遍历
- POJ 2255 Tree Recovery 二叉树遍历
- POJ 2255 Tree Recovery (二叉树遍历)
- poj 2255 二叉树遍历(前中求后)
- POJ 2255 二叉树遍历 已知前序遍历 中序遍历 求后序遍历
- POJ 2255 二叉树由前序遍历中序遍历得到后序遍历
- POJ 2255 Tree Recovery 二叉树的遍历
- POJ 2255 Tree Recovery 二叉树+遍历+递归
- poj 2255 Tree Recovery(求后序遍历,二叉树)
- poj 2255 Tree Recovery(二叉树的遍历)
- poj 2255 二叉树的后序遍历
- POJ 2255 Tree Recovery(二叉树遍历)
- POJ 2255 Tree Revovery 二叉树遍历序列推导
- poj 2255 Tree Recovery (二叉树的顺序遍历)
- POJ 2255Tree Recovery 二叉树重建(根据前序遍历和中序遍历写出后序遍历)
- 【二叉树】POJ 2255
- poj 2255二叉树
- sql server学习
- 几种有趣的不常见排序
- NYOJ 题目171 聪明的kk
- mysql入门--采用命令行进行登陆与退出
- 通过sqli-labs学习sql注入——进阶挑战之less23-28a
- POJ - 2255 二叉树遍历
- UVA - 11054 Wine trading in Gergovia
- SDUT3334数据结构实验之栈七:出栈序列判定
- 线上遇到插入重复数据(重复提交)
- hdu1269 迷宫城堡(tarjan入门)
- Notification用法,注意API版本,API大于11的setLatestEventInfo()方法已经不适用
- Count The colors_zoj1610_线段树
- 【Java基础】面向对象特性
- matlab 函数