博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 1710 Binary Tree Traversals
阅读量:5160 次
发布时间:2019-06-13

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

Binary Tree Traversals
Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u
 

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

和小白里面的那题差不多,参考小白完成。

真心佩服lrj,如此巧妙的代码让我受益匪浅啊。。。

AC代码:

#include 
#define MAX 1001void build(int n, int *s1, int *s2, int *s){ if(n <= 0) return; int p; for(int i=0; i < n; i++) if(s1[0] == s2[i]) { p = i; break; } build(p, s1 + 1, s2, s); build(n - p - 1, s1 + p + 1, s2 + p + 1, s + p); s[n - 1] = s1[0];}int main(){ int s1[MAX],s2[MAX],ans[MAX]; int n; while (scanf("%d", &n) != EOF) { for(int i=0; i

转载于:https://www.cnblogs.com/java20130723/archive/2013/04/24/3212174.html

你可能感兴趣的文章
gRPC
查看>>
.NET在VS2008中生成DLL并调用
查看>>
C#程序员参考手册—知识点精选
查看>>
spring mvc + mybatis + spring aop声明式事务管理没有作用
查看>>
基本组件的使用
查看>>
Iphone的发送短信-邮件-打电话代码示例
查看>>
学生成绩管理系统(三)
查看>>
(数据科学学习手札52)pandas中的ExcelWriter和ExcelFile
查看>>
C语言相关基础知识整理
查看>>
[转贴] start-stop-daemon命令
查看>>
php脚本执行时间限制
查看>>
一步步学习SPD2010--第二章节--处理SP网站(2)--管理网站用户和权限
查看>>
mysql存储过程和函数的操作
查看>>
Kubernetes入门
查看>>
C++中三种正则表达式比较(C regex,C ++regex,boost regex)
查看>>
微软MSN为何会没落的反思
查看>>
Flask 框架 简介
查看>>
用 Python 给程序加个进度条,让你的看起来更炫酷?
查看>>
Java开发笔记(二十八)布尔包装类型
查看>>
Java开发笔记(一百零九)XML报文的定义和解析
查看>>