1043. Is It a Binary Search Tree

PAT A 甲级 1043 Is It a Binary Search Tree (25分) 1043 Is It a Binary Search Tree (25分) 吐槽 ……感觉二叉树是甲级里最难的一类题了……比图论还难。要变通和自己思考逻辑的部分实在太多了。 思路 首先这道题是“非常规”的,这题不是“这个二叉树是不是搜索树”,而是“这遍历有没有可能是某个搜索树的先序遍历”。正常情况下需要两种遍历才能确立一棵二叉树,但这道题却只给了一种遍历。 不过,“二叉搜索树”本身是有条件的,正是这个条件使得这种确定可以在只有先序遍历的情况下实现。 我首先想到的是二叉搜索树的中序遍历就是数字的从到大(或者镜像的话是从大到小,后面只分析非镜像搜索树),可以靠这一点直接获得一个中序遍历从而用两个遍 立即下载

Is It a Binary Search Tree

A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:

  • The left subtree of a node contains only nodes with keys less than the node’s key.
  • The right subtree of a node contains only nodes with keys greater than or equal to the node’s key.
  • Both the left and right subtrees must also be binary search trees.

If we swap the left and right subtrees of every node, then the resulting tree is called the Mirror Image of a BST.

Now given a sequence of integer keys, you are supposed to tell if it is the preorder traversal sequence of a BST or the mirror image of a BST.

Input Specification:

Each input file contains one test case. For each case, the first line contains a positive integer N (<=1000). Then N integer keys are given in the next line. All the numbers in a line are separated by a space.

Output Specification:

For each test case, first print in a line “YES” if the sequence is the preorder traversal sequence of a BST or the mirror image of a BST, or “NO” if not. Then if the answer is “YES”, print in the next line the postorder traversal sequence of that tree. All the numbers in a line must be separated by a space, and there must be no extra space at the end of the line.

Sample Input 1:

7
8 6 5 7 10 8 11

Sample Output 1:

YES
5 7 6 8 11 10 8

Sample Input 2:

7
8 10 11 8 6 7 5

Sample Output 2:

YES
11 8 10 7 5 6 8

Sample Input 3:

7
8 6 8 5 10 9 11

Sample Output 3:

NO

题意

给定n个正整数,判断其是否是二叉查找树或镜像二叉查找树的先序序列(镜像二叉查找树是将二叉查找树所有结点的左右子树互换得到的),若是则列出其后序序列。

注意题目里定义的二叉查找树是左子树均小于根节点,而右子树均大于等于根节点。

思路

由给定的n个正整数来重建二叉查找树,并记录(镜像)二叉查找树的先序序列、后序序列,与给定的先序序列进行比较,若相同则输出后序序列。

镜像二叉查找树的的遍历只要在原树遍历时交换左右子树的访问顺序即可。

内置数据类型的vector变量可直接比较大小。


代码实现

#include <cstdio>
#include <vector>
using namespace std;

vector<int> ini, pre, post, preM, postM;

struct node
{
    int data;
    struct node* lchild;
    struct node* rchild;
};

void insert(node* &root, int x)     // 二叉树插入结点
{
    if (root == NULL)
    {
        root = new node;
        root->data = x;
        root->lchild = root->rchild = NULL;
        return;
    }

    if (x >= root->data)
        insert(root->rchild, x);
    else
        insert(root->lchild, x);
}

void preOrder(node* root)       // 原树先序遍历
{
    if (root == NULL)
        return;

    pre.push_back(root->data);
    preOrder(root->lchild);
    preOrder(root->rchild);
}

void postOrder(node* root)      // 原树后序遍历
{
    if (root == NULL)
        return;

    postOrder(root->lchild);
    postOrder(root->rchild);
    post.push_back(root->data);
}

void preOrderM(node* root)      // 镜像树先序遍历
{
    if (root == NULL)
        return;

    preM.push_back(root->data);
    preOrderM(root->rchild);
    preOrderM(root->lchild);
}

void postOrderM(node* root)     // 镜像树后序遍历
{
    if (root == NULL)
        return;

    postOrderM(root->rchild);
    postOrderM(root->lchild);
    postM.push_back(root->data);
}

int main()
{
    int n, x;
    node* root = NULL;

    scanf("%d", &n);
    for (int i = 0; i < n; i++)     // 二叉树构建
    {
        scanf("%d", &x);
        ini.push_back(x);
        insert(root, x);
    }

    preOrder(root);
    postOrder(root);
    preOrderM(root);
    postOrderM(root);

    if (ini == pre)     // 先序序列与原树一致
    {
        printf("YES\n");
        for (int i = 0; i < post.size(); i++)
        {
            if (i > 0)
                printf(" ");
            printf("%d", post[i]);
        }
    }
    else if (ini == preM)   // 先序序列与镜像树一致
    {
        printf("YES\n");
        for (int i = 0; i < postM.size(); i++)
        {
            if (i > 0)
                printf(" ");
            printf("%d", postM[i]);
        }
    }
    else
        printf("NO\n");

    return 0;
}
告别LM2596!用LM5175打造400W自动升降压数控电源(附完整电路图与代码) 本文详细介绍了如何利用LM5175芯片设计400W自动升降压数控电源,替代传统的LM2596方案。通过四开关Buck-Boost拓扑结构,LM5175实现了高达98%的转换效率和400W大功率输出,支持无缝升降压切换。文章涵盖芯片选型、电路设计、PCB布局及STM32数控实现,为工程师提供完整的实践指南。 阅读详情

相关推荐

PWM控制技术+Simulink仿真详解

想要理解SVPWM控制技术,首先要了解PWM控制技术。 PWM控制技术就是对脉冲宽度进行调制的技术,通过对一系列脉冲宽度进行调制来等效获得所需要的波形(包括形状和幅值)。 PWM控制的基本原理:冲量(窄脉冲的面积)相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果(输出响应波形)基本相同,即面积等效原理;用一系列幅值相等,宽度按一定规律变化的高频脉冲序列代替期望的输出波形,多用于逆变电路的控制; PWM信号生成的方法有:计算法、调制法、跟踪法,主要对调制法进行详解 ...

小师兄的学习记录 5万+

1043 Is It a Binary Search Tree (25分) 构建二叉排序树

A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties: The left subtree of a node contains only nodes with keys less than the node's key. The right subtree of a node contains only nodes with keys greater th

muAluo的博客 517

ROS2_IGH方案配置(二)——Ubuntu22.04 实时内核性能验证与调优

本文详细介绍了在Ubuntu22.04系统上配置ROS2_IGH方案时,如何验证和调优PREEMPT_RT实时内核性能。通过使用cyclictest工具进行基准测试和压力测试,分析中断与硬件延迟,并优化内核参数,确保系统满足工业控制领域对硬实时性的苛刻要求。文章还提供了针对ROS2的特殊优化建议和性能监控方案,帮助开发者实现毫秒级延迟的稳定控制。

weixin_30791095的博客 222

1043 Is It a Binary Search Tree (二叉搜索树建树,性质)

既然给定了二叉搜索树的所有结点,那第一反应可能会是先将这些结点构建成一个二叉搜索树(正好学到了二叉搜索树的建树)。最直接的解法,也是我最开始的写法,存在很多注意点,问题很多,不太推荐。按理应该能过,但是我最后还是放弃了这种解法。(碎碎念:一直拿不到满分,尝试了多种解法,最后挑了一个最常规的解法去一直debug才满分通过了,,这题花费了快4个小时了,,哭死)涉及到二叉搜索树的一个性质:即二叉搜索树的中序遍历为所有结点的从小到大(镜像为从大到小)的排序。题意:给定一个二叉树的前序遍历,判断是否为二叉搜索树。

qq_63128300的博客 500

RAD Studio 12安装全攻略:从下载到破解InterBase的完整流程(附KeyPatch使用技巧)

本文提供RAD Studio 12的完整安装指南,包括系统要求、安装步骤及InterBase数据库的高效配置方法。详细介绍了如何使用KeyPatch工具进行许可证处理,并分享了IDE优化和开发技巧,帮助开发者快速上手这一强大的跨平台开发工具。

q6r7s8t9的博客 946

libnice和coturn这两个库有交叉实现的地方,具体有啥区别?

TurnAdmin:是一个TURN的管理工具,此工具能被用来管理用户账号的增删改查。 TurnServer:是TURN和STUN的服务器实现。 Turnutils_uclient: 模拟多个UDP、TCP、TLS或DTLS客户端 Turnutils_peer: 一个简单的无状态UDP-ECHO服务器,用作中继模式中的最终服务器 Turnutils_stunclient: 一个简单的STUN客户端例子 Turnutils_rfc5769check: 检查STUN/TURN协议实现的正确性。 我们..

Langeldep的专栏 1318

PAT甲级-1043 Is It a Binary Search Tree

二叉排序树,镜像二叉排序树,由二叉排序树的先序求后序 C++

weixin_74092648的博客 612

IROS 2025机器人技术解析:从诡异设计到硬核应用

机器人技术正从传统的结构化环境应用,迈向复杂非结构化场景的深度交互。其核心原理在于通过仿生设计、多模态感知与智能控制算法,赋予机器人类似生物的适应性与交互能力。这一技术演进的价值在于突破传统机器人在极端环境、精密操作和自然交互中的瓶颈。例如,结合深度强化学习的全身动力学控制,使机器人能在废墟、管道等复杂地形中自主导航;而软体机器人技术则通过材料变形实现安全、柔顺的抓取操作。这些技术最终服务于极端环境巡检、精密装配和高端陪护等刚性应用场景,推动机器人从功能实现迈向与环境、人进行深度、智能交互的新阶段。

weixin_34006468的博客 449

1043.Is It a Binary Search Tree [二叉搜索树||二叉搜索树的前序转后序]

1043 Is It a Binary Search Tree (25分) A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties: The left subtree of a node contains only nodes with keys less than the node’s key. The right subtree of a node cont

_计算机好苦 239

Android 14.0 首次开机默认授予app运行时权限(去掉运行时授权弹窗)

在14.0的系统rom产品定制化开发中,在6.0以后对于权限的申请,都需要动态申请,所以会在系统首次启动后,在app的首次运行时, 会弹出授权窗口,会让用户手动授予app运行时权限,在由于系统产品开发需要要求默认授予app运行时权限,不需要用户默认授予运行时弹窗,所以需要在首次开机默认授予所有app运行时权限

安卓兼职framework和app工程师的博客 2531

Agent Skills应用解析:构建可扩展、高效率AI探员

Agent Skills是一个简洁而强大的概念:它是一个包含组织化的指令、脚本和资源的文件夹,智能体可以动态地发现并加载这些内容,以在特定任务中表现更佳。可组合性(Composability):一个Agent Skill是一个独立的、封装良好的能力单元。开发者可以为不同的功能(例如PDF处理、网络浏览、数据分析)创建独立的技能,然后根据需要将它们组合起来,赋能不同的智能体。这意味着不再需要为每个用例构建碎片化、定制设计的智能体,而是可以通过组合现有技能来快速构建新的专业智能体。

形上得其象,形下合于数;阴阳自济,玄理自明。 1627

PAT甲级1043、 Is It a Binary Search Tree

建树的方法就是找到根(第一个位置),然后在树的其他部分找到第一个大于或小于根的元素,这里BST的话就找大于的,因为BST左子树全小于根,镜像的话就是小于的,如果能建出来一棵,那么就是可行的,建不出来的话就说明不行。我没有想到什么特别好的思路,只能一边建树一边判断。1、叶子节点没有孩子,要注意怎么判断出来。2、如果一棵树都只有左子树。然后递归下去就可以了。

geooorge的博客 930

SQL Server数据库备份与恢复

在 SQL Server 中,数据库备份与恢复是保障数据安全的核心操作。

zjw541806的博客 1876

PAT 1043. Is It a Binary Search Tree

题目:http://pat.zju.edu.cn/contests/pat-a-practise/1043 题解: 1:通过输入构造二叉排序树 2:先序遍历并与输入顺序比较 3:如果比较不符合再构造镜像二叉排序树 4:比较输出结果 代码: #include #include #include #include #include #include #include #include #

Ted's 游乐园 1498

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

1043 Is It a Binary Search Tree

题目来源:PAT (Advanced Level) Practice A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties: The left subtree of a node contains only nodes with keys less than the node's key. The right subtree of a node cont

weixin_51032998的博客 377

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

PAT 甲级 1043  Is It a Binary Search Tree

1043 Is It a Binary Search Tree (25 point(s)) A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties: The left subtree of a node contains only nodes wi...

漫浸天空的雨色的备忘录~ 1085

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

PAT甲级 1043 Is It a Binary Search Tree

【代码】PAT甲级 1043 Is It a Binary Search Tree。

Liu_Xingyun的博客 249

1043 Is It a Binary Search Tree——PAT甲级

of a BST.

flyidj的博客 781

PAT 1043 Is It a Binary Search Tree

原题链接:1043 Is It a Binary Search Tree (25分) 关键词:BST 题目大意: 给出一些整数序列,问你这有没有可能是二叉排序树或者二叉排序树镜像的前序遍历,如果是的话还要输出后序遍历。

cwtnice的博客 170
上一篇: 随机选择算法
下一篇: 1099. Build A Binary Search Tree
绿色小光头
博客等级 码龄10年 10粉丝 301原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值