PTA数据结构与算法题目集(中文) 7-28
PTA数据结构与算法题目集(中文) 7-28
对于二叉搜索树,我们规定任一结点的左子树仅包含严格小于该结点的键值,而其右子树包含大于或等于该结点的键值。如果我们交换每个节点的左子树和右子树,得到的树叫做镜像二叉搜索树。
现在我们给出一个整数键值序列,请编写程序判断该序列是否为某棵二叉搜索树或某镜像二叉搜索树的前序遍历序列,如果是,则输出对应二叉树的后序遍历序列。
输入格式:
输入的第一行包含一个正整数N(≤1000),第二行包含N个整数,为给出的整数键值序列,数字间以空格分隔。
输出格式:
输出的第一行首先给出判断结果,如果输入的序列是某棵二叉搜索树或某镜像二叉搜索树的前序遍历序列,则输出YES,否侧输出NO。如果判断结果是YES,下一行输出对应二叉树的后序遍历序列。数字间以空格分隔,但行尾不能有多余的空格。
输入样例1:
7
8 6 5 7 10 8 11
输出样例1:
YES
5 7 6 8 11 10 8
输入样例2:
7
8 6 8 5 10 9 11
输出样例2:
NO
题目分析:一道利用树的基础题 将数据读入后 再按先序遍历输出 比较 注意因为有镜像二叉搜索树 所以先序遍历要检查从左边开始以及从右边开始 最后输出后序遍历时 二叉搜索树从左边 镜像二叉搜索从右边
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<malloc.h> typedef struct TreeNode* PtrToTreeNode;
typedef PtrToTreeNode BTree;
struct TreeNode
{
int Data;
PtrToTreeNode Lc;
PtrToTreeNode Rc;
}; PtrToTreeNode Insert(int Data, BTree BT)
{
if (!BT)
{
BT = (BTree)malloc(sizeof(struct TreeNode));
BT->Data = Data;
BT->Lc = NULL;
BT->Rc = NULL;
}
else
{
if (Data < BT->Data)
BT->Lc = Insert(Data, BT->Lc);
else
BT->Rc = Insert(Data, BT->Rc);
}
return BT;
} int Pre[];
int Size;
void PreOrder(BTree Bt)
{
if (Bt)
{
Pre[Size++] = Bt->Data;
PreOrder(Bt->Lc);
PreOrder(Bt->Rc);
}
}
void PreOrderRight(BTree Bt)
{
if (Bt)
{
Pre[Size++] = Bt->Data;
PreOrderRight(Bt->Rc);
PreOrderRight(Bt->Lc);
}
} int Last[];
int Size2;
void LastOrder(BTree Bt)
{
if (Bt)
{
LastOrder(Bt->Lc);
LastOrder(Bt->Rc);
Last[Size2++] = Bt->Data;
}
}
void LastOrderRight(BTree Bt)
{
if (Bt)
{
LastOrderRight(Bt->Rc);
LastOrderRight(Bt->Lc);
Last[Size2++] = Bt->Data;
}
} int main()
{
int N;
scanf("%d", &N);
BTree Bt = NULL;
int Num[] = { };
for (int i = ; i < N; i++)
{
scanf("%d", &Num[i]);
Bt = Insert(Num[i], Bt);
}
PreOrder(Bt);
int flag = ;
int Left = ;
for (int i = ; i < N; i++)
{
if (Num[i] != Pre[i])
{
flag = ;
break;
}
}
if (!flag)
{
Size = ;
flag = ;
Left = ;
PreOrderRight(Bt);
for (int i = ; i < N; i++)
{
if (Num[i] != Pre[i])
{
flag = ;
break;
}
}
}
if (!flag)
printf("NO\n");
else
{
printf("YES\n");
if (Left)
{
LastOrder(Bt);
for (int i = ; i < N - ; i++)
printf("%d ", Last[i]);
}
else
{
LastOrderRight(Bt);
for (int i = ; i < N - ; i++)
printf("%d ", Last[i]);
}
printf("%d", Last[N - ]);
}
return ;
}
PTA数据结构与算法题目集(中文) 7-28的更多相关文章
- PTA数据结构与算法题目集(中文) 7-43字符串关键字的散列映射 (25 分)
PTA数据结构与算法题目集(中文) 7-43字符串关键字的散列映射 (25 分) 7-43 字符串关键字的散列映射 (25 分) 给定一系列由大写英文字母组成的字符串关键字和素数P,用移位法定义 ...
- PTA数据结构与算法题目集(中文) 7-42整型关键字的散列映射 (25 分)
PTA数据结构与算法题目集(中文) 7-42整型关键字的散列映射 (25 分) 7-42 整型关键字的散列映射 (25 分) 给定一系列整型关键字和素数P,用除留余数法定义的散列函数将关键字映射 ...
- PTA数据结构与算法题目集(中文) 7-41PAT排名汇总 (25 分)
PTA数据结构与算法题目集(中文) 7-41PAT排名汇总 (25 分) 7-41 PAT排名汇总 (25 分) 计算机程序设计能力考试(Programming Ability Test,简称P ...
- PTA数据结构与算法题目集(中文) 7-40奥运排行榜 (25 分)
PTA数据结构与算法题目集(中文) 7-40奥运排行榜 (25 分) 7-40 奥运排行榜 (25 分) 每年奥运会各大媒体都会公布一个排行榜,但是细心的读者发现,不同国家的排行榜略有不同.比如 ...
- PTA数据结构与算法题目集(中文) 7-39魔法优惠券 (25 分)
PTA数据结构与算法题目集(中文) 7-39魔法优惠券 (25 分) 7-39 魔法优惠券 (25 分) 在火星上有个魔法商店,提供魔法优惠券.每个优惠劵上印有一个整数面值K,表示若你在购买某商 ...
- PTA数据结构与算法题目集(中文) 7-38寻找大富翁 (25 分)
PTA数据结构与算法题目集(中文) 7-38寻找大富翁 (25 分) 7-38 寻找大富翁 (25 分) 胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人.假 ...
- PTA数据结构与算法题目集(中文) 7-37 模拟EXCEL排序 (25 分)
PTA数据结构与算法题目集(中文) 7-37 模拟EXCEL排序 (25 分) 7-37 模拟EXCEL排序 (25 分) Excel可以对一组纪录按任意指定列排序.现请编写程序实现类似功能. ...
- PTA数据结构与算法题目集(中文) 7-36 社交网络图中结点的“重要性”计算 (30 分)
PTA数据结构与算法题目集(中文) 7-36 社交网络图中结点的“重要性”计算 (30 分) 7-36 社交网络图中结点的“重要性”计算 (30 分) 在社交网络中,个人或单位(结点)之间通过某 ...
- PTA数据结构与算法题目集(中文) 7-35 城市间紧急救援 (25 分)
PTA数据结构与算法题目集(中文) 7-35 城市间紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市 ...
- PTA数据结构与算法题目集(中文) 7-34
PTA数据结构与算法题目集(中文) 7-34 7-34 任务调度的合理性 (25 分) 假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行.“ ...
随机推荐
- Redis07——Redis到底能用在什么地方(下)
在前一篇文章中,我们已经介绍过Redis的一些实际应用.如KV缓存.分布式锁.消息队列,由于篇幅原因,并未介绍完全.接下来将继续为各位带来Redis的更多应用. bitmat(位图) 实现 位图的基本 ...
- MATLAB神经网络(5) 基于BP_Adaboost的强分类器设计——公司财务预警建模
5.1 案例背景 5.1.1 BP_Adaboost模型 Adaboost算法的思想是合并多个“弱”分类器的输出以产生有效分类.其主要步骤为:首先给出弱学习算法和样本空间($X$,$Y$),从样本空间 ...
- linux ftp服务器设置,只允许用户访问指定的文件夹,禁止访问其他文件夹
在Linux中添加ftp用户,并设置相应的权限,操作步骤如下: 1.环境:ftp为vsftp.被限制用户名为test.被限制路径为/home/test 2.建用户:在root用户下: useradd ...
- git密令使用
git密令是一种非常好用的代码版本管理工具,相比SVN,Sourcetree 使用起来复杂,主要是没有汉化包,当你使用熟练时,其实也是非常简单的,逼格高. 具体使用如下: 情景一:你只有远程库,没有本 ...
- .NET 5 Preview 1中的ASP.NET Core更新 (2020年3月16日)
.NET 5 Preview1现在可用,可以进行评估了! .NET 5将是当前版本. 开始 要在.NET 5.0中开始使用 ASP.NET Core,请安装.NET 5.0 SDK. 如果您使用的是W ...
- winform不能循环引用,使用接口传值到界面
public partial class frmMain : Form, IFormManager { 4 public frmMain() { InitializeComponent(); 8 } ...
- JVM收集器简介
JVM GC收集器集合:
- 大数据软件安装之ZooKeeper监控
一.ZooKeeper安装 官方文档: https://zookeeper.apache.org/doc/r3.5.5/zookeeperStarted.html 1.解压分发 [test@hadoo ...
- java基础-Map
简介 Map是一种接口,实现类有 hashMap SortedMap是继承自Map的接口,实现类为TreeMap,在内部会对Key进行排序 遍历Map 使用for each循环遍历Map实例的keyS ...
- jupyter之配置自己喜欢的python环境
之前安装anaconda,会自动安装jupyer笔记本,但是本人从来没有用过,近期查看github上的一些教程时,发现很多文件都是.ipynb为后缀的jupyter文件,于是自己准备琢磨一下把环境换成 ...