hdu1710(Binary Tree Traversals)(二叉树遍历)
Binary Tree Traversals
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3475 Accepted Submission(s): 1555
Problem Description
A binary tree is a finite set of vertices that is either empty or consists of a root r and two disjoint binary trees called the left and right subtrees. There are three most important ways in which the vertices of a binary tree can be systematically traversed or ordered. They are preorder, inorder and postorder. Let T be a binary tree with root r and subtrees T1,T2. In a preorder traversal of the vertices of T, we visit the root r followed by visiting the vertices of T1 in preorder, then the vertices of T2 in preorder. In an inorder traversal of the vertices of T, we visit the vertices of T1 in inorder, then the root r, followed by the vertices of T2 in inorder. In a postorder traversal of the vertices of T, we visit the vertices of T1 in postorder, then the vertices of T2 in postorder and finally we visit r. Now you are given the preorder sequence and inorder sequence of a certain binary tree. Try to find out its postorder sequence.
Input
The input contains several test cases. The first line of each test case contains a single integer n (1<=n<=1000), the number of vertices of the binary tree. Followed by two lines, respectively indicating the preorder sequence and inorder sequence. You can assume they are always correspond to a exclusive binary tree.
Output
For each test case print a single line specifying the corresponding postorder sequence.
Sample Input
9 1 2 4 7 3 5 8 9 6 4 7 2 1 8 5 9 3 6
Sample Output
7 4 2 8 9 5 6 3 1
Source
HDU 2007-Spring Programming Contest
给定一课二叉树的先序和中序,求这课数的后序:
采用划区域的方法,逐步缩小区间求解
分析:
代码:
1 /*hdu 1710 二叉树*/
2 //#define LOCAL
3 #include<cstdio>
4 #include<cstring>
5 using namespace std;
6 const int maxn=1005;
7 int aa[maxn],bb[maxn];
8 void dfs(int a,int b,int n,int tag)
9 {
10 int i;
11 if(n<=0)return ;
12 for(i=0;aa[a]!=bb[b+i];i++);
13 dfs(a+1,b,i,0);
14 dfs(a+i+1,b+i+1,n-i-1,0);
15 printf("%d",aa[a]);
16 if(!tag)printf(" ");
17 }
18 int main()
19 {
20 #ifdef LOCAL
21 freopen("test.in","r",stdin);
22 #endif
23 int n,i,k,pre;
24 while(scanf("%d",&n)!=EOF)
25 {
26 for(i=1;i<=n;i++)
27 scanf("%d",aa+i);
28 for(i=1;i<=n;i++)
29 scanf("%d",bb+i);
30 dfs(1,1,n,1);
31 printf("n");
32 }
33 return 0;
34 }
顺便做了一个二叉树知道其中两个序列求第三个序列的模板吧! 注意: 知道前序和后序是无法求出唯一二叉树的!
代码:
//这部分检验aa[]为先序,bb[]为中序
void dfs_1(char aa[],char bb[], int a,int b,int n)
{
if(n<=0)return ;
int i;
for(i=0;aa[a]!=bb[b+i];i++);
dfs_1(aa,bb,a+1,b,i); //左子树
dfs_1(aa,bb,a+i+1,b+i+1,n-i-1); //右子树
printf("%c",aa[a]);
}
//aa[]为中序,bb[]为后序
void dfs_3(char aa[],char bb[],int a,int b,int n)
{
if(n<=0)return ;
printf("%c",bb[b]);
int i;
for(i=0;bb[b]!=aa[a+i];i++);
dfs_3(aa,bb,a,b-n+i,i); //左子树
dfs_3(aa,bb,a+i+1,b-1,n-i-1); //右子树
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- JavaEE中,考勤(签到签退)功能的实现
- HTTP协议详解,浏览器和服务器交互过程详解
- 京东网页(动态)搭建,利用jquery实现
- 京东购物车(动态)网页搭建,利用JavaScript实现
- 你不知道的 TypeScript 泛型(万字长文,建议收藏)
- JavaScript中的函数、对象
- 京东购物车网页(静态)搭建
- MyBatis注解详解
- MyBatis完整环境搭建步骤
- JDBC常见操作总结
- Oracle数据中的序列、索引、视图、事务操作详解以及rowid 和 rownum的简单介绍
- Oracle子查询详解
- SQL92、SQL99中的多表连接查询区别
- Oracle中的分组查询与DML
- Oracle中的基本SQL知识