HLG2040二叉树遍历已知前中,求后
二叉树的遍历 | ||||||
|
||||||
Description | ||||||
给出一棵二叉树的中序和前序遍历,输出它的后序遍历。 | ||||||
Input | ||||||
本题有多组数据,输入处理到文件结束。 每组数据的第一行包括一个整数n,表示这棵二叉树一共有n个节点。 接下来的一行每行包括n个整数,表示这棵树的中序遍历。 接下来的一行每行包括n个整数,表示这棵树的前序遍历。 3<= n <= 100 |
||||||
Output | ||||||
每组输出包括一行,表示这棵树的后序遍历。 | ||||||
Sample Input | ||||||
7 4 2 5 1 6 3 7 1 2 4 5 3 6 7 |
||||||
Sample Output | ||||||
4 5 2 6 7 3 1
|
||||||
Source | ||||||
2014 Winter Holiday Contest 5 |
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
int n,num=0;
int kmp(int root,int str2[])
{
int s=0;
while(1)
{
if(str2[s]==root)
return s;
s++;
}
return 0;
}
void calculate(int m,int str1[],int str2[],int str3[] )
{
if(m<=0)
return ;
int len=kmp(str1[0],str2);
calculate(len,str1+1,str2,str3);
calculate(m-len-1,str1+len+1,str2+len+1,str3);
str3[num++]=str1[0];
}
int main()
{
int n;
int str1[105],str2[105],str3[105];
while(scanf("%d",&n)!=EOF)
{
num=0;
memset(str1,0,sizeof(str1));
memset(str2,0,sizeof(str2));
memset(str3,0,sizeof(str3));
for(int i=0;i<n;i++)
scanf("%d",&str2[i]);
for(int i=0;i<n;i++)
scanf("%d",&str1[i]);
calculate(n,str1,str2,str3);
for(int i=0;i<n;i++)
printf("%d ",str3[i]);
printf("\n");
}
return 0;
}
最新文章
- jquery的几种ajax提交方式
- Xamarin.iOS调试提示需要iOS SDK
- Linux GDB常用命令一栏
- 1分钟学会Markdown语法
- 文件和目录之chmod和fchmod函数
- [TOP]疯狂的投资
- 虚拟机windows xp 下安装配置mysql cluster 7.3.2
- sql查询过程中 update,insert,delete可视化收影响行数
- JS中的for和for in循环
- Thml 小插件8 天气插件定制
- 使用datapump 导出导入同义词(export and import synonym using datapump)
- 分布式版本控制系统Git-----6.Git 常见命令一览表
- [JSOI2008]Blue Mary开公司
- JQuery EasyUI 初始
- 2019.03.09 codeforces620E. New Year Tree(线段树+状态压缩)
- centos下redis安全相关
- WEB即时通信
- python package
- CentOS 7 安装配置 Gitlab
- php新手第一次安装mongo