1、题目:

2、代码:

#include<iostream>
#include<algorithm>
using namespace std;
struct Node
{
int left;
int right;
int father;
int ord;
} node[100010];
void preOrder(int m)
{
if(m!=-1)
{
cout<<m<<" ";
preOrder(node[m].left);
preOrder(node[m].right);
}
} void posOrder(int m)
{
if(m!=-1)
{
posOrder(node[m].left);
posOrder(node[m].right);
cout<<m<<" ";
}
}
int main()
{
int n;
cin>>n;
int i;
for(i=1; i<=n; i++)
{
cin>>node[i].father;
}
for(i=1; i<=n; i++)
{
int x;
cin>>x;
node[x].ord=i;
}
for(i=1; i<=n; i++)
{
node[i].left=-1;
node[i].right=-1;
}
//为每个结点设置儿子
for(i=1; i<=n; i++)
{
if(node[node[i].father].left==-1)
{
node[node[i].father].left=i;
}
else
{
node[node[i].father].right=i;
}
}
//确认左右子树,调整左右儿子位置
for(i=1; i<=n; i++)
{
if(node[i].left!=-1&&node[node[i].left].ord>node[i].ord)//如果左儿子在中序中的位置大于父亲在中序的位置,
//说明这个应该是右儿子
{
swap(node[i].left,node[i].right);
}
if(node[i].right!=-1&&node[node[i].right].ord<node[i].ord)//如果右儿子在中序中的位置小于父亲在中序的位置,
//说明这个应该是左儿子
{
swap(node[i].left,node[i].right);
}
}
preOrder(1);
cout<<endl;
posOrder(1);
cout<<endl;
return 0;
}

算法与数据结构实验题6.4 order (二叉树)的更多相关文章

  1. 算法与数据结构实验题 6.4 Summary

    ★实验任务 可怜的 Bibi 丢了好几台手机以后,看谁都像是小偷,他已经在小本本上记 下了他认为的各个地点的小偷数量. 现在我们将 Bibi 的家附近的地形抽象成一棵有根树.每个地点都是树上的 一个节 ...

  2. 算法与数据结构实验题 6.3 search

    ★实验任务 可怜的 Bibi 刚刚回到家,就发现自己的手机丢了,现在他决定回头去搜索 自己的手机. 现在我们假设 Bibi 的家位于一棵二叉树的根部.在 Bibi 的心中,每个节点 都有一个权值 x, ...

  3. 算法与数据结构实验题 4.2 小 F 打怪

    ★实验任务 小 F 很爱打怪,今天因为系统 bug,他提前得知了 n 只怪的出现顺序以及击 倒每只怪得到的成就值 ai.设第一只怪出现的时间为第 1 秒,这个游戏每过 1 秒 钟出现一只新怪且没被击倒 ...

  4. 算法与数据结构实验题 4.1 伊姐姐数字 game

    ★实验任务 伊姐姐热衷于各类数字游戏,24 点.2048.数独等轻轻松松毫无压力.一 日,可爱的小姐姐邀请伊姐姐一起玩一种简单的数字 game,游戏规则如下: 一开始桌上放着 n 张数字卡片,从左到右 ...

  5. 算法与数据结构实验题 5.2 Missile

    1.题目: 2.解题思路: 把每个点对应的两条半径求出,之后对d1进行升序排序,对应d2也改变位置.其中一个圆心的半径r1确定之后,除去第一个圆包围的点,在其余点中找到另外一个圆的最长的半径r2,此时 ...

  6. 基础算法和数据结构高频题 II

    DFS的两种理解方式:1. 按照实际执行顺序模拟 (适合枚举型DFS,下节课内容)2. 按照DFS的定义宏观理解 (适合分治型DFS,本节课内容) 1 Convert BST to Greater T ...

  7. 第三章 基础算法和数据结构高频题 I

    区间类问题 1 Missing Interval public List<String> findMissingRanges(int[] nums, int lower, int uppe ...

  8. 数据结构实验6:C++实现二叉树类

    实验6 学号:     姓名:      专业:   6.1 实验目的 掌握二叉树的动态链表存储结构及表示. 掌握二叉树的三种遍历算法(递归和非递归两类). 运用二叉树三种遍历的方法求解有关问题. 6 ...

  9. DS实验题 order

    算法与数据结构 实验题 6.4 order ★实验任务 给出一棵二叉树的中序遍历和每个节点的父节点,求这棵二叉树的先序和后序遍历. ★数据输入 输入第一行为一个正整数n表示二叉树的节点数目,节点编号从 ...

随机推荐

  1. js反射机制

    本文转载自:http://blog.csdn.net/liuzizi888/article/details/6632434 什么是反射机制反射机制指的是程序在运行时能够获取自身的信息.例如一个对象能够 ...

  2. php 二维数组(没啥技术含量)

    <?php $cars = array( array('benchi',20,18), array('baoma',30,21), array('aodi',23,9) ); echo $car ...

  3. Java多线程-线程的同步与锁

    一.同步问题提出 线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏.例如:两个线程ThreadA.ThreadB都操作同一个对象Foo对象,并修改Foo对象上的数据. package ...

  4. AIR call dll

    commandproxy C#通讯 https://code.google.com/p/commandproxy smartrcp Java And Flex Application http://s ...

  5. jquery.easypiechart.js简介

    此插件主要是用来统计新的访问.跳出率.服务器负载.使用的RAM等,功能很强大,带有HTML5的动画效果,效果非常炫,看效果吧easyPieChart一款新型的EASY饼图数据统计Jquery插件截图: ...

  6. JAVA设计模式之解释器模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述解释器(Interpreter)模式的: 解释器模式是类的行为模式.给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个 ...

  7. [PAT]数列求和(20)

    #include "stdio.h" #include "malloc.h" #include "math.h" void calc(int ...

  8. Android软件更新安装。

    app的开发有一个问题是避免不了的,那就是软件的升级维护. 这里我在查过一些资料和写了一个升级帮助类.使用很方便.直接导入就可以了. ( VersionBean.class为更新地址返回的数据对象,我 ...

  9. JS跨域知识整理

    在“跨域”一词经常性地出现以前,我们其实已经频繁地使用它了.如在A网站的img,src指向B网站的某一图片地址,毫无疑问,这在通常情况下都是能正常显示的(且不论防盗链技术):同样,可以使script标 ...

  10. Libevent 定时器

    先摘一点网上的介绍 libevent是一个事件触发的网络库,适用于windows.linux.bsd等多种平台,内部使用select.epoll.kqueue等系统调用管理事件机制.著名分布式缓存软件 ...