二叉树 二叉搜索树_二叉树和二叉搜索树

二叉树 二叉搜索树_二叉树和二叉搜索树原题链接一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点,其左子树中所有结点的键值小于该结点的键值;其右子树中所有结点的键值大于等于该结点的键值;其左右子树都是二叉搜索树。所谓二叉搜索树的“镜像”,即将所有结点的左右子树对换位置后所得到的树。给定一个整数键值序列,现请你编写程序,判断这是否是对一棵二叉搜索树或其镜像进行前序遍历的结果。输入格式:输入的第一行给出正整数 N(≤1000)。随后一行给出 N 个整数键值,其间以空格分隔。输出格式:如果输入序列是对一棵二叉搜索树或

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

原题链接

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

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

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

输入格式:
输入的第一行给出正整数 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<bits/stdc++.h>
#define x first
#define y second
#define send string::nops
using namespace std;
typedef long long ll;
const int N = 1e4 + 10;
const int M = 3 * N;
const int INF = 0x3f3f3f3f;
typedef pair<int,int> PII;
typedef struct Node * pnode;
struct Node{ 
   
    pnode left,right;
    int val;
};
int a[N];
int flag1 = true,flag2 = true;
vector<int>res;
pnode build1(int l,int r){ 
   
    pnode t = NULL;
    if(l <= r){ 
   
        t = (pnode)malloc(sizeof(Node));
        t->val = a[l];
// cout<<a[l]<<endl;
        int pox = l + 1;
        while(a[pox] < a[l] && pox <= r)pox ++;
        for(int i = pox;i <= r;i ++)
            if(a[i] < a[l])
                flag1 = false;
        t->left = build1(l + 1,pox - 1);
        t->right = build1(pox,r);
    }
    return t;
}
pnode build2(int l,int r){ 
   
    pnode t = NULL;
    if(l <= r){ 
   
        t = (pnode)malloc(sizeof(Node));
        t->val = a[l];
        int pox = l + 1;
        while(a[pox] >= a[l] && pox <= r)pox ++;
        for(int i = pox;i <= r;i ++)
            if(a[i] >= a[l])
                flag2 = false;
        t->left = build2(l + 1,pox - 1);
        t->right = build2(pox,r);
    }
    return t;
}
void travel(pnode T){ 
   
    if(T->left != NULL)
        travel(T->left);
    if(T->right != NULL)
        travel(T->right);
    res.push_back(T->val);
}
int main(){ 
   
    int n;
    cin>>n;
    for(int i = 0;i < n;i ++)cin>>a[i];
    pnode T = NULL;
    T = build1(0,n - 1);
    if(!flag1)
        T = build2(0,n - 1);
    if(flag1 || flag2){ 
   
        cout<<"YES"<<endl;
        travel(T);
        cout<<res[0];
        for(int i = 1;i < res.size();i ++)cout<<" "<<res[i];
    }else cout<<"NO"<<endl;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168949.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月8日 下午11:36
下一篇 2022年8月8日 下午11:36


相关推荐

  • cad会提示计算机中缺少,cad2014缺少shx文件该怎么解决?

    cad会提示计算机中缺少,cad2014缺少shx文件该怎么解决?我们在打开 CAD 文件时 经常会碰到缺少 SHX 文件 这个怎么处理 因为每次一打开就弹出缺少 SHX 页面 比较烦 估计是很多使用 CAD 的朋友遇到过的问题 这个主要是 CAD 中缺少这种字体 把字体的问题解决了就可以了 1 在打开时显示缺少 SHX 文件 系统提示下一步怎么操作 是为每个 SHX 文件指定替换文件 还是忽略缺少的 SHX 文件并继续 2 如果选择忽略缺少的 SHX 文件并继续打开后图纸会缺少一部分文字 信息不全

    2026年3月19日
    3
  • Android经常使用的五种弹出对话框[通俗易懂]

    Android经常使用的五种弹出对话框

    2022年1月31日
    52
  • Java 多线程编程基础(详细)

    Java 多线程编程基础(详细)Java 多线程编程基础进程与线程多线程实现 Thread 类实现多线程 Runnable 接口实现多线程 Callable 接口实现多线程多线程运行状态多线程常用操作方法线程的命名和获取线程休眠线程中断线程强制执行线程让步线程优先级设定线程的同步和锁死线程同步处理线程死锁进程与线程进程与线程的基本认识进程 Process 进程是程序的一次动态执行过程 它经历了从代码加载 执行 到执行完毕的一个完整过程 同时也是并发执行的程序在执行过程中分配和管理资源的基本单位 竞争计算机系统资源的基本单位 线程 Thread

    2026年3月20日
    2
  • Java并发——Executor框架详解(Executor框架结构与框架成员)

    Java并发——Executor框架详解(Executor框架结构与框架成员)一 什么是 Executor 框架 我们知道线程池就是线程的集合 线程池集中管理线程 以实现线程的重用 降低资源消耗 提高响应速度等 线程用于执行异步任务 单个的线程既是工作单元也是执行机制 从 JDK1 5 开始 为了把工作单元与执行机制分离开 Executor 框架诞生了 他是一个用于统一创建与运行的接口 Executor 框架实现的就是线程池的功能 二 Executor 框架结构图解 1 Executor 框

    2026年3月20日
    2
  • JNI总结(一)

    JNI总结(一)

    2022年2月4日
    46
  • native/ascii在线转换工具_中文转ascii

    native/ascii在线转换工具_中文转ascii1,原理Property文件中,使用的编码根据机器的设置可能是GBK或者UTF-8。而在Java中读取Property文件时使用的是Unicode编码,编码方式不同会导致中文乱码,因此需要将Property文件中的中文字符转化成Unicode编码才能正常显示中文。2,解决办法Java提供了native2ascii这种专门的工具对Property文件进行编码转换,在JDK安装环境的bin目录下可以找…

    2025年10月26日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号