算法与数据结构实验题6.4 order (二叉树)
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 (二叉树)的更多相关文章
- 算法与数据结构实验题 6.4 Summary
★实验任务 可怜的 Bibi 丢了好几台手机以后,看谁都像是小偷,他已经在小本本上记 下了他认为的各个地点的小偷数量. 现在我们将 Bibi 的家附近的地形抽象成一棵有根树.每个地点都是树上的 一个节 ...
- 算法与数据结构实验题 6.3 search
★实验任务 可怜的 Bibi 刚刚回到家,就发现自己的手机丢了,现在他决定回头去搜索 自己的手机. 现在我们假设 Bibi 的家位于一棵二叉树的根部.在 Bibi 的心中,每个节点 都有一个权值 x, ...
- 算法与数据结构实验题 4.2 小 F 打怪
★实验任务 小 F 很爱打怪,今天因为系统 bug,他提前得知了 n 只怪的出现顺序以及击 倒每只怪得到的成就值 ai.设第一只怪出现的时间为第 1 秒,这个游戏每过 1 秒 钟出现一只新怪且没被击倒 ...
- 算法与数据结构实验题 4.1 伊姐姐数字 game
★实验任务 伊姐姐热衷于各类数字游戏,24 点.2048.数独等轻轻松松毫无压力.一 日,可爱的小姐姐邀请伊姐姐一起玩一种简单的数字 game,游戏规则如下: 一开始桌上放着 n 张数字卡片,从左到右 ...
- 算法与数据结构实验题 5.2 Missile
1.题目: 2.解题思路: 把每个点对应的两条半径求出,之后对d1进行升序排序,对应d2也改变位置.其中一个圆心的半径r1确定之后,除去第一个圆包围的点,在其余点中找到另外一个圆的最长的半径r2,此时 ...
- 基础算法和数据结构高频题 II
DFS的两种理解方式:1. 按照实际执行顺序模拟 (适合枚举型DFS,下节课内容)2. 按照DFS的定义宏观理解 (适合分治型DFS,本节课内容) 1 Convert BST to Greater T ...
- 第三章 基础算法和数据结构高频题 I
区间类问题 1 Missing Interval public List<String> findMissingRanges(int[] nums, int lower, int uppe ...
- 数据结构实验6:C++实现二叉树类
实验6 学号: 姓名: 专业: 6.1 实验目的 掌握二叉树的动态链表存储结构及表示. 掌握二叉树的三种遍历算法(递归和非递归两类). 运用二叉树三种遍历的方法求解有关问题. 6 ...
- DS实验题 order
算法与数据结构 实验题 6.4 order ★实验任务 给出一棵二叉树的中序遍历和每个节点的父节点,求这棵二叉树的先序和后序遍历. ★数据输入 输入第一行为一个正整数n表示二叉树的节点数目,节点编号从 ...
随机推荐
- EDIUS设置Alpha转场的教程
有刚开始学习EDIUS视频编辑软件的同学吗?你们是否需要一本很好的EDIUS教程呢?你们可以到EDIUS中文网站里面找哦,小编会一直更新EDIUS教程的,能给你们带来帮助我是非常高兴的.今天我们来一起 ...
- JavaScript 装逼指南
Summary 本文秉承着 你看不懂是你sb,我写的代码就要牛逼 的理念来介绍一些js的装逼技巧. 下面的技巧,后三个,请谨慎用于团队项目中(主要考虑到可读性的问题),不然,leader 干你没商量. ...
- js 实现ActiveXObject("Scripting.Dictionary") 功能
/* 字典 ActiveXObject("Scripting.Dictionary") 项目中用到的ActiveXObject("Scripting.Dictionary ...
- MSSQL 判断临时表是否存在
方法一: if exists (select * from tempdb.dbo.sysobjects where id = object_id(N'tempdb..#tempcitys') and ...
- Java事务处理全解析(五)—— Template模式
在本系列的上一篇文章中,我们讲到了使用TransactionManger和ConnectionHolder完成线程安全的事务管理,在本篇中,我们将在此基础上引入Template模式进行事务管理. Te ...
- Spring Boot CLI安装
Spring Boot是一个命令行工具,用于使用Spring进行快速原型搭建.它允许你运行Groovy脚本,这意味着你可以使用类Java的语法,并且没有那么多的模板代码. 你没有必要为了使用Sprin ...
- Makefile 自动化变量
Makefile中常用自动化变量解释如下: $@------规则的目标文件名 $<------规则的第一个依赖项文件名 $^------规则的所有依赖文件列表,以空格隔开. $?-------所 ...
- [IIS]IIS扫盲(四)
IIS简易安装 义哥门户网 IIS(Internet Information Server,互联网信息服务)是一种Web(网页)服务组件,其中包括Web服务器.FTP服务器.NNTP服务器和SMT ...
- 让finder显示路径
在控制台输入 defaults write com.apple.finder _FXShowPosixPathInTitle -bool YES 重启finder即可.
- MyBatis环境配置
<settings> <!-- 使全局的映射器启用或禁用缓存. --> <setting name="cacheEnabled" value=&quo ...