news 2026/5/9 19:47:30

L2-004 这是二叉搜索树吗?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
L2-004 这是二叉搜索树吗?

L2-004 这是二叉搜索树吗?

一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点,

  • 其左子树中所有结点的键值小于该结点的键值;
  • 其右子树中所有结点的键值大于等于该结点的键值;
  • 其左右子树都是二叉搜索树。

所谓二叉搜索树的“镜像”,即将所有结点的左右子树对换位置后所得到的树。

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

输入格式:

输入的第一行给出正整数 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

import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class Main { static int N=1010,mod=1000000007; static double res=0; static int a[]=new int[N]; static int ans1[]=new int[N],cnt1,ans2[]=new int[N],cnt2; // static double money[]=new double[N]; //static int h[]=new int[N]; //static boolean f[]=new boolean[N];//true表示在一组 false表示在重复组 //qq public static void main(String []args) throws IOException{ //System.out.println(100); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out)); String g[]=br.readLine().split(" "); int n=Integer.parseInt(g[0]); //String g[]=br.readLine().split(" "); g=br.readLine().split(" "); for (int i = 0; i < n; i++) { a[i]=Integer.parseInt(g[i]); } if(n==1){ System.out.println("YES"); System.out.println(a[0]); return; } if(check1(0,n-1)){ System.out.println("YES"); StringBuilder stringBuilder=new StringBuilder(); for (int i = 0; i <n; i++) { stringBuilder.append(ans1[i]+" "); } System.out.println(stringBuilder.toString().trim()); }else if(check2(0,n-1)){ System.out.println("YES"); StringBuilder stringBuilder=new StringBuilder(); for (int i = 0; i <n; i++) { stringBuilder.append(ans2[i]+" "); } System.out.println(stringBuilder.toString().trim()); }else{ System.out.println("NO"); } } static boolean check1(int l,int r){ if(l>r)return true;//一定要增加空树判断 if(l==r){ ans1[cnt1++]=a[l]; return true; } int root=a[l]; //判断左子树的数是不是比自己小 int i = l+1; for (; i <= r && a[i]<root; i++); int j=i; //判断右子树的数是不是比自己大或者相等 for (; i <=r && a[i]>=root; i++); if(i-1!=r)return false; //判断子树是否符合 boolean f=check1(l+1, j-1)&&check1(j, r); if(f==true)ans1[cnt1++]=root; return f; } static boolean check2(int l,int r){ if(l>r)return true; if(l==r){ ans2[cnt2++]=a[l]; return true; } int root=a[l]; //判断左子树的数是不是比自己大或者相等 int i = l+1; for (i = l+1; i <= r && a[i]>=root; i++); int j=i; //判断右子树的数是不是比自己小 for (; i <=r && a[i]<root; i++); if(i-1!=r)return false; //判断子树是否符合 boolean f=check2(l+1, j-1)&&check2(j, r); if(f==true)ans2[cnt2++]=root; return f; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 19:47:30

CANN/ops-solver实数矩阵LU分解

Sgetrf 【免费下载链接】ops-solver 本项目是CANN提供的高级数值求解算子库&#xff0c;实现矩阵分解、求逆、特征值求解等功能在NPU上的加速计算。 项目地址: https://gitcode.com/cann/ops-solver 产品支持情况 产品是否支持Atlas 200I/500 A2 推理产品Atlas 推理系列…

作者头像 李华
网站建设 2026/5/9 19:41:31

对比自行维护与使用Taotoken聚合服务在稳定性上的体验差异

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 对比自行维护与使用Taotoken聚合服务在稳定性上的体验差异 在构建基于大模型的应用时&#xff0c;开发者常常需要接入多个模型提供…

作者头像 李华
网站建设 2026/5/9 19:33:37

AI 时代,六年Java程序员转行做鸭

最近群里看到一张图&#xff0c;有一个程序员转行买鸭子了。 程序员的真实内情 程序员这行&#xff0c;外人看来高大上&#xff0c;高薪&#xff0c;体面&#xff0c;能力强&#xff0c;改变世界。实际情况是加班多&#xff0c;有时候熬夜&#xff0c;也要不断学习&#xff0c…

作者头像 李华
网站建设 2026/5/9 19:31:10

AI赋能人工耳蜗:从噪声分离到个性化编码的听觉重建技术

1. 项目概述&#xff1a;当AI遇见听觉重建作为一名长期关注医疗科技交叉领域的从业者&#xff0c;我见证了许多技术从实验室走向临床的激动时刻。近年来&#xff0c;最让我感到兴奋的领域之一&#xff0c;便是人工智能与神经植入设备的深度融合&#xff0c;特别是它在人工耳蜗中…

作者头像 李华