order

Description

给出一棵二叉树的中序遍历和每个节点的父节点,求这棵二叉树的先序和后 序遍历。

Input

输入第一行为一个正整数 n 表示二叉树的节点数目, 节点编号从 1 到 n,其中 1 为根节点。
第 2 行有 n 个数字, 第 i 个数字表示 i 的父亲节点。( 1 的父亲节点为 0, 表示无)
第 3 行为中序遍历。
30%的数据: n<=20;
60%的数据: n<=1000;
100%的数据: n<=10000;

Output

输出 2 行, 第一行为先序遍历,第二行为后序遍历。

Sample Input

100 7 2 2 9 1 8 1 6 89 5 6 1 10 8 7 3 2 4

Sample Output

1 6 9 5 8 10 7 2 3 45 9 6 10 3 4 2 7 8 1

思路

存下每个节点的左右儿子,然后根据中序遍历判断谁是左儿子,谁是右儿子,建完树,跑一下先序遍历和后序遍历

 
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 10005;
int lson[maxn],rson[maxn],pos[maxn];
bool first = true;  

void PreOrder(int x)
{
    if (x != 1) printf(" ");
    printf("%d",x);
    if (lson[x])    PreOrder(lson[x]);
    if (rson[x])    PreOrder(rson[x]);
}  

void PostOrder(int x)
{
    if (lson[x])    PostOrder(lson[x]);
    if (rson[x])    PostOrder(rson[x]);
    first?printf("%d",x):printf(" %d",x);
    first = false;
}  

int main()
{
    //freopen("input.txt","r",stdin);
    //freopen("output.txt","w",stdout);
    int N,i,tmp;
    memset(lson,0,sizeof(lson));
    memset(rson,0,sizeof(rson));
    memset(pos,0,sizeof(pos));
    scanf("%d",&N);
    for (i = 1;i <= N;i++)
    {
        scanf("%d",&tmp);
        if (tmp == 0)   continue;
        if (!lson[tmp]) lson[tmp] = i;
        else    rson[tmp] = i;
    }
    for (i = 1;i <= N;i++)
    {
        scanf("%d",&tmp);
        pos[tmp] = i;
    }
    for (i = 1;i <= N;i++)
    {
        if (lson[i] && rson[i])
        {
            if (pos[rson[i]] < pos[lson[i]])
            {
                swap(rson[i],lson[i]);
            }
        }
        else if (!lson[i] && rson[i])
        {
            if (pos[rson[i]] < pos[i])
            {
                lson[i] = rson[i];
                rson[i] = 0;
            }
        }
        else if (lson[i] && !rson[i])
        {
            if (pos[lson[i]] > pos[i])
            {
                rson[i] = lson[i];
                lson[i] = 0;
            }
        }
    }
    PreOrder(1);printf("\n");
    PostOrder(1);printf("\n");
    return 0;
}

  

数据结构作业——order(二叉树遍历)的更多相关文章

  1. javascript数据结构与算法--二叉树遍历(后序)

    javascript数据结构与算法--二叉树遍历(后序) 后序遍历先访问叶子节点,从左子树到右子树,再到根节点. /* *二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 * * * */ ...

  2. javascript数据结构与算法--二叉树遍历(先序)

    javascript数据结构与算法--二叉树遍历(先序) 先序遍历先访问根节点, 然后以同样方式访问左子树和右子树 代码如下: /* *二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 * ...

  3. javascript数据结构与算法--二叉树遍历(中序)

    javascript数据结构与算法--二叉树遍历(中序) 中序遍历按照节点上的键值,以升序访问BST上的所有节点 代码如下: /* *二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 * ...

  4. 二叉树遍历,递归,栈,Morris

    一篇质量非常高的关于二叉树遍历的帖子,转帖自http://noalgo.info/832.html 二叉树遍历(递归.非递归.Morris遍历) 2015年01月06日 |  分类:数据结构 |  标 ...

  5. SDUT 3344 数据结构实验之二叉树五:层序遍历

    数据结构实验之二叉树五:层序遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 已知一个按 ...

  6. java数据结构之二叉树遍历的非递归实现

    算法概述递归算法简洁明了.可读性好,但与非递归算法相比要消耗更多的时间和存储空间.为提高效率,我们可采用一种非递归的二叉树遍历算法.非递归的实现要借助栈来实现,因为堆栈的先进后出的结构和递归很相似.对 ...

  7. SDUT OJ 数据结构实验之二叉树五:层序遍历

    数据结构实验之二叉树五:层序遍历 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descri ...

  8. SDUT OJ 数据结构实验之二叉树二:遍历二叉树

    数据结构实验之二叉树二:遍历二叉树 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descr ...

  9. SDUT 3341 数据结构实验之二叉树二:遍历二叉树

    数据结构实验之二叉树二:遍历二叉树 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 已知二叉 ...

随机推荐

  1. 如何在 Apache 中为你的网站设置404页面

    一个好的网站,拥有一个好的 404页面 是标配. 为何要有 404页面?如何设置一个 404页面? why 404 pages? 在本地,比如我打开 localhost/fuck.htm(该文件不存在 ...

  2. 从.NET的宠物商店到Android MVC MVP

    1 一些闲话 记得刚进公司的时候,我们除了做常规的Training Project外,每天还要上课,接受各种技术培训和公司业务介绍.当时第一次知道QA和SQA的区别.Training Project时 ...

  3. Verilog代码规范I

    Verilog代码规范I "规范"这问题 "规范"这个富含专业气息的词汇(个人感觉),其实规范这种东西,就是大家都约定熟成的东西,一旦你不遵守这个东西,专业人士 ...

  4. matlab 绘制条形图

    Matlab使用bar和barh函数来绘制二维条形图.分别是绘制二维垂直条形图和二维水平条形图. 转自:http://jingyan.baidu.com/article/64d05a02524e63d ...

  5. Nginx的配置文件

    #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #erro ...

  6. eclipse的历史版本及下载

    有时候我们总会遇到在需要eclipse而无法及时找到的时候, 所以那些有用的链接, 是帮助我们能够及时找到我们想要版本的额最好方式 Eclipse 3.1 IO[木卫一,伊奥] 2005 http:/ ...

  7. CSS巩固

    1. 浮动元素与非浮动元素在一行,浮动元素不占宽度.所以应将非浮动元素改为浮动,或让非浮动元素的宽度为当前行的宽度. 元素浮动之后,周围的元素会重新排列. 2. 布局找模板,或参考其他网站! 自己进行 ...

  8. springMVC自定义注解实现用户行为验证

    最近在进行项目开发的时候需要对接口做Session验证 1.自定义一个注解@AuthCheckAnnotation @Documented @Target(ElementType.METHOD) @I ...

  9. webService访问加密-Soapheader

    WebService head加密,可以对 WebService设置访问用户名和密码,增强 WebService的安全性 使 WebService只能被授权用户使用. 具体实现步骤: 1. 定义一个  ...

  10. 状态压缩 HDU 1565

    多组数据 给你一个n*n的矩阵 不能相邻的取数 上下左右 求最大的和 #include<stdio.h> #include<algorithm> #include<str ...