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 1710 二叉树*/
//#define LOCAL
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=;
int aa[maxn],bb[maxn];
void dfs(int a,int b,int n,int tag)
{
int i;
if(n<=)return ;
for(i=;aa[a]!=bb[b+i];i++);
dfs(a+,b,i,);
dfs(a+i+,b+i+,n-i-,);
printf("%d",aa[a]);
if(!tag)printf(" ");
}
int main()
{
#ifdef LOCAL
freopen("test.in","r",stdin);
#endif
int n,i,k,pre;
while(scanf("%d",&n)!=EOF)
{
for(i=;i<=n;i++)
scanf("%d",aa+i);
for(i=;i<=n;i++)
scanf("%d",bb+i);
dfs(,,n,);
printf("\n");
}
return ;
}

顺便做了一个二叉树知道其中两个序列求第三个序列的模板吧!  注意: 知道前序和后序是无法求出唯一二叉树的!

代码:

//这部分检验aa[]为先序,bb[]为中序
void dfs_1(char aa[],char bb[], int a,int b,int n)
{
if(n<=)return ;
int i;
for(i=;aa[a]!=bb[b+i];i++);
dfs_1(aa,bb,a+,b,i); //左子树
dfs_1(aa,bb,a+i+,b+i+,n-i-); //右子树
printf("%c",aa[a]);
}
//aa[]为中序,bb[]为后序
void dfs_3(char aa[],char bb[],int a,int b,int n)
{
if(n<=)return ;
printf("%c",bb[b]);
int i;
for(i=;bb[b]!=aa[a+i];i++);
dfs_3(aa,bb,a,b-n+i,i); //左子树
dfs_3(aa,bb,a+i+,b-,n-i-); //右子树
}

hdu1710(Binary Tree Traversals)(二叉树遍历)的更多相关文章

  1. hdu1710 Binary Tree Traversals(二叉树的遍历)

    A binary tree is a finite set of vertices that is either empty or consists of a root r and two disjo ...

  2. hdu 1710 Binary Tree Traversals 前序遍历和中序推后序

    题链;http://acm.hdu.edu.cn/showproblem.php?pid=1710 Binary Tree Traversals Time Limit: 1000/1000 MS (J ...

  3. PAT 1020 Tree Traversals[二叉树遍历]

    1020 Tree Traversals (25)(25 分) Suppose that all the keys in a binary tree are distinct positive int ...

  4. PAT 甲级 1020 Tree Traversals (二叉树遍历)

    1020. Tree Traversals (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Suppo ...

  5. HDU 1710 Binary Tree Traversals(二叉树)

    题目地址:HDU 1710 已知二叉树先序和中序求后序. #include <stdio.h> #include <string.h> int a[1001], cnt; ty ...

  6. hdu1710 Binary Tree Traversals

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1710 题意:给前序.中序求后序,多组 前序:根左右 中序:左右根 分析:因为前序(根左右)最先出现的总 ...

  7. HDU 1710 Binary Tree Traversals (二叉树遍历)

    Binary Tree Traversals Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  8. HDU 1710 二叉树的遍历 Binary Tree Traversals

    Binary Tree Traversals Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  9. Binary Tree Traversals(HDU1710)二叉树的简单应用

    Binary Tree Traversals Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

随机推荐

  1. jquery之 animate()方法详解

    jQuery.animate() 函数详解 animate()函数用于执行一个基于css属性的自定义动画. 你可以为匹配的元素设置css样式,animate()函数将会执行一个从当前样式到指定的css ...

  2. 关于float的说明

    关于float的说明     如图所示,蓝色的div和红色的div处于黑色的div(宽为500px)之中,其中蓝色的div设置了做浮动: 由图一(红色div的margin-top为10px,margi ...

  3. 针对各种浏览器css不兼容的写法

    /*针对谷歌浏览器内核支持的CSS样式*/@media screen and (-webkit-min-device-pixel-ratio:0) { 样式 } /*针对IE6特制识别的CSS样式*/ ...

  4. Ubuntu14.04设置开机root用户登录

    1.sudo vim /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf 2.添加:greeter-show-manual-login=true 3.su ...

  5. windows下的Git简单入手

    现在再搞golang,用go get github.com/xxx 命令使需要git.提交新项目到github.com也要git,老东西了,呵呵现在也要学习一下. 下载windows版的git. ·准 ...

  6. nyoj 1058部分和问题(DFS)

    部分和问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 给定整数a1.a2........an,判断是否可以从中选出若干数,使它们的和恰好为K.   输入 首先, ...

  7. Entity Framework(1)

    Web.Config配置 <dataConfiguration defaultDatabase="strConn"> <providerMappings> ...

  8. Win7_刻录DVD

    1.刻录 临时文件夹: 1.1.C:\Users\具体的用户名\AppData\Local\Microsoft\Windows\Burn 1.2.双击 插入刻录盘的光驱,直接将文件复制到 这里,实际上 ...

  9. jQuery插件开发全解析

    jQuery插件的开发包括两种: 一种是类级别的插件开发,即给jQuery添加新的全局函数,相当于给jQuery类本身添加方法.jQuery的全局函数就是属于jQuery命名空间的函数,另一种是对象级 ...

  10. jQuery扩展插件和拓展函数的写法

    <script type="text/JavaScript">            //jQuery插件的写法(需要传入操作对象)        ;(function ...