L2-004 这是二叉搜索树吗? (25 分)

L2-004 这是二叉搜索树吗? (25 分)
一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点,

其左子树中所有结点的键值小于该结点的键值;
其右子树中所有结点的键值大于等于该结点的键值;
其左右子树都是二叉搜索树。
所谓二叉搜索树的“镜像”,即将所有结点的左右子树对换位置后所得到的树。

给定一个整数键值序列,现请你编写程序,判断这是否是对一棵二叉搜索树或其镜像进行前序遍历的结果。

输入格式:
输入的第一行给出正整数 N(≤1000)。随后一行给出 N 个整数键值,其间以空格分隔。

输出格式:
如果输入序列是对一棵二叉搜索树或其镜像进行前序遍历的结果,则首先在一行中输出 YES ,然后在下一行输出该树后序遍历的结果。数字间有 1 个空格,一行的首尾不得有多余空格。若答案是否,则输出 NO。

输入样例 1:
7
8 6 5 7 10 8 11
输出样例 1:
YES
5 7 6 8 11 10 8
输入样例 2:
7
8 10 11 8 6 7 5
输出样例 2:
YES
11 8 10 7 5 6 8
输入样例 3:
7
8 6 8 5 10 9 11
输出样例 3:
NO
上代码:

#include<iostream>
#include<vector>
using namespace std;
struct node{node *left,*right;int data;
};
node *insert(node *p,int x){if (p == nullptr){p = new node;p->data = x;p->left=nullptr;p->right=nullptr;}else{if (p->data>x){p->left = insert(p->left,x);}else {p->right = insert(p->right,x);}}return p;
}
vector<int>pre;
void preorder(node *root){if (root==nullptr) return;pre.push_back(root->data);preorder(root->left);preorder(root->right);
}
vector<int>post;
void postorder(node *root){if (root==nullptr) return;postorder(root->left);postorder(root->right);post.push_back(root->data);
}
node *mirror(node *root){if (root==nullptr) return nullptr;root->left = mirror(root->left);root->right = mirror(root->right);node *temp = root->left;root->left=root->right;root->right=temp;return root;
}
int main()
{node *Tree = nullptr;int n;cin>>n;vector<int>cun;for (int i=0;i<n;i++){int num;cin>>num;Tree = insert(Tree,num);cun.push_back(num);}//根据数据建立一个二叉搜索树并保存他的数据顺序bool flag=true;preorder(Tree);//前序遍历一遍for (int i=0;i<n;i++){if (pre[i]!=cun[i]){flag=false;break;}//前序遍历结果和它给的数据是否一样}if (flag) {cout<<"YES"<<endl;postorder(Tree);for (int i=0;i<n;i++){if (i!=0) cout<<" ";cout<<post[i];}return 0;}//一样就输出并结束程序Tree = mirror(Tree);//镜像树flag=true;pre.clear();//清空刚才前序遍历的结果preorder(Tree);//再前序遍历for (int i=0;i<n;i++){if (pre[i]!=cun[i]){flag=false;break;}}if (flag){cout<<"YES"<<endl;postorder(Tree);for (int i=0;i<n;i++){if (i!=0) cout<<" ";cout<<post[i];}return 0;}cout<<"NO";//来到最后说明不是前序遍历return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/428971.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux高频命令汇总,Linux高频命令

8种机械键盘轴体对比本人程序员&#xff0c;要买一个写代码的键盘&#xff0c;请问红轴和茶轴怎么选&#xff1f;findfind path [options] params作用&#xff1a;在指定目录下查找文件1234find / -name "target.java" #在根目录下查找target.java文件find -name &qu…

深入理解javascript函数参数

arguments javascript对参数要求很随意&#xff0c;她才不管你传进来的参数是什么数据类型&#xff0c;甚至可以不传参数。实际上&#xff0c;javascript函数调用甚至不检查传入形参的个数。 1 function add(x){ 2 return x 1; 3 } 4 console.log(add(1))…

linux系统时间函数,Linux时间时区详解与常用时间函数

时间与时区整个地球分为二十四时区&#xff0c;每个时区都有自己的本地时间。UTC时间 与 GMT时间我们可以认为格林威治时间就是时间协调时间(GMT UTC)&#xff0c;格林威治时间和UTC时间都用秒数来计算的。UTC时间与本地时间UTC 时区差 本地时间时区差东为正&#xff0c;西为…

7-5 汉诺塔的非递归实现 (25 分)

7-5 汉诺塔的非递归实现 (25 分) 借助堆栈以非递归&#xff08;循环&#xff09;方式求解汉诺塔的问题&#xff08;n, a, b, c&#xff09;&#xff0c;即将N个盘子从起始柱&#xff08;标记为“a”&#xff09;通过借助柱&#xff08;标记为“b”&#xff09;移动到目标柱&…

js 异步问题

如果发现前端的异步请求&#xff0c;network有发送成功而且有返回值&#xff0c;但是没有进前端的callback成功回掉函数内&#xff0c;这时候就需要检查是不是配置文件做了语法限制&#xff0c;只能返回某些数据格式&#xff0c;不能返回某些数据格式。 一般限制最多的就是后端…

海康、大华IPC的rtsp格式

海康&#xff1a;  rtsp://[username]:[password][ip]:[port]/[codec]/[channel]/[subtype]/av_stream说明&#xff1a;username: 用户名。例如admin。password: 密码。例如12345。ip: 为设备IP。例如 192.0.0.64。port: 端口号默认为554&#xff0c;若为默认可不填写。codec…

linux awr 日志,Linux平台生成awr报告

1&#xff0e;使用Oracle用户登录应用服务器所使用的数据库所在的服务器# su –oracle2&#xff0e;输入env命令&#xff0c;查询出ORACLE_HOME 目录3&#xff0e;然后进入$ORACLE_HOME/rdbms/admin目录&#xff0c;查询awr语句(此步骤可以忽略)此处可以直接省略2&#xff0c;3…

利用一维数组输出杨辉三角

直接上代码&#xff1a; package hello;import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in);int n in.nextInt();int table [] new int [n1];table[0] 1;for (int i1;i<n;i) {for (int j0;j<…

缓存(Cache)管理 ---- 系列文章

利用Cache防止同一帐号重复登录.net中Cache管理操作系统缓存全解析 (下)系统缓存全解析 (中)系统缓存全解析 (上)出处&#xff1a;http://www.cnblogs.com/luckdv/tag/%E7%BC%93%E5%AD%98/转载于:https://www.cnblogs.com/mq0036/p/7291955.html

找到一个二位数组的鞍点

上代码&#xff1a; package hello;import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in);int mat[][] new int[3][3];for (int i0;i<3;i) {for (int j0;j<3;j) {mat[i][j] in.nextInt();}}bool…

linux 文件按时间 函数,[Linux文件属性]使用utime函数操作文件的时间参数

//这是一个使用utime函数对文件的时间参数进行修改的实例//文件首先使用stat函数获得文件当前的时间参数&#xff0c;然后使用//Open函数对文件进行修改&#xff0c;再用utime函数对文件的时间信息//进行修改.文件名由argv参数给出#include #include #include int main(int arg…

HDU 1159 Common Subsequence 动态规划

2017-08-06 15:41:04 writer&#xff1a;pprp 刚开始学dp&#xff0c;集训的讲的很难&#xff0c;但是还是得自己看&#xff0c;从简单到难&#xff0c;慢慢来&#xff08;如果哪里有错误欢迎各位大佬指正&#xff09; 题意如下&#xff1a; 给两个字符串&#xff0c;找到其中大…

用类,求三个数的最大数

上代码&#xff1a; package hello;import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in);int a,b,c;a in.nextInt();b in.nextInt();c in.nextInt();int num max(a,b,c);System.out.println("…

【Xmail】使用Xmail搭建局域网邮件服务器

下载地址&#xff1a; http://www.xmailserver.org/xmail-1.27.win32bin.zip&#xff0c;当前最新版本 1.27。 解压文件&#xff1a;xmail-1.27.win32bin.zip 1、把其中的 MailRoot 目录拷贝到 C:\&#xff1b; 2、把 C:\xmail-1.27.win32bin\xmail-1.27 目录下的所有文件&am…

linux ntfs硬盘自动挂,linux下查看所有硬盘分区+挂接NTFS磁盘/硬盘+自动挂接硬盘方法...

基本上所有Linux 发行版在启动系统时都是根据/etc/fstab文件的配置来挂载分区的。在/etc/fstab中&#xff0c;根据不同格式的分区&#xff0c;其挂载参数也不同&#xff0c;参数不同其结果不同&#xff0c;包括用户的读写权限&#xff0c;下面一一说来。1、对于fat32格式分区&a…

uploadify 配置后,页面显示无效果

uploadify使用的是Flash版本 谷歌浏览器&#xff1a;默认没有开启Flash&#xff0c;进行如下图设置即可 转载于:https://www.cnblogs.com/daryl/p/7299471.html

linux 磁盘科隆,上海第二工业大学嵌入式操作系统B复习(无答案版)

嵌入式操作系统B复习答疑时间6月18日9&#xff1a;00—14:00,15#518填空题20分&#xff0c;选择题20分&#xff0c;判断题10分&#xff0c;简答题20分&#xff0c;实验题30分。一&#xff0e;填空题1.ARM中断处理有哪两种中断模式、快速中断模式。2.基于J-TAG调试结构包括哪几个…

Day39:threading模块、ThreadLocal

一、threading模块 1、线程对象的创建 1.1 Thread类直接创建 import threading import timedef countNum(n): # 定义某个线程要运行的函数print("running on number:%s" %n)time.sleep(3)if __name__ __main__:t1 threading.Thread(targetcountNum,args(23,)) #生成…

linux h5 动画软件下载,技术|7款绚丽的jQuery/HTML5动画及源码

jQuery是一款非常流行的JavaScript框架&#xff0c;利用jQuery&#xff0c;我们可以制作简单的动画效果&#xff0c;但是结合HTML5&#xff0c;这样的动画效果就会变得更加出彩。本文分享了7款jQuery结合HTML5的动画以及源码下载。1、HTML5/SVG实现布谷鸟时钟动画这是一款非常有…

时钟抖动对高速ADC采样系统的影响

在高速数据采样中&#xff0c;ADC时钟信号的稳定性对其性能有至关重要的影响&#xff0c;因为这些抖动会破坏高速ADC的时序。 孔径的定义 孔径时间ta&#xff0c;是指从采样时钟跳变开始&#xff0c;一直到保持电压建立。换言之&#xff0c;孔径是指采样保持电路中开关切换的时…