17年春季第四题 PAT甲级 1135 Is It A Red-Black Tree (30)

codesys【modbusRTU】主站 【代码】modbusRTU【codesys】 阅读详情

题目来源:https://pintia.cn/problem-sets/994805342720868352/problems/994805346063728640

备考汇总贴:2020年3月PAT甲级满分必备刷题技巧

There is a kind of balanced binary search tree named red-black tree in the data structure. It has the following 5 properties:

  • (1) Every node is either red or black.
  • (2) The root is black.
  • (3) Every leaf (NULL) is black.
  • (4) If a node is red, then both its children are black.
  • (5) For each node, all simple paths from the node to descendant leaves contain the same number of black nodes.

For example, the tree in Figure 1 is a red-black tree, while the ones in Figure 2 and 3 are not.

rbf1.jpgrbf2.jpgrbf3.jpg
Figure 1Figure 2Figure 3

For each given binary search tree, you are supposed to tell if it is a legal red-black tree.

Input Specification:

Each input file contains several test cases. The first line gives a positive integer K (≤30) which is the total number of cases. For each case, the first line gives a positive integer N (≤30), the total number of nodes in the binary tree. The second line gives the preorder traversal sequence of the tree. While all the keys in a tree are positive integers, we use negative signs to represent red nodes. All the numbers in a line are separated by a space. The sample input cases correspond to the trees shown in Figure 1, 2 and 3.

Output Specification:

For each test case, print in a line "Yes" if the given tree is a red-black tree, or "No" if not.

Sample Input:

3
9
7 -2 1 5 -4 -11 8 14 -15
9
11 -2 1 -7 5 -4 8 14 -15
8
10 -7 5 -6 8 15 -11 17

Sample Output:

Yes
No
No

题目大意(以下内容主要转载自liuchuo,经过了我的编辑补充)

给一棵二叉搜索树的前序遍历,判断它是否为红黑树,是输出Yes,否则输出No。

题目分析

一、这道题必须按照题目给的红黑树五个定义去思考:
(1) Every node is either red or black. (不用判断)
(2) The root is black.(需要判断)
(3) Every leaf (NULL) is black.(不用判断,但是可以用在4的判断里)
(4) If a node is red, then both its children are black.(需要判断)
(5) For each node, all simple paths from the node to descendant leaves contain the same number of black nodes.(需要判断)

题目还提到红黑树是一种二叉搜索树(所以中序唯一确定),那给定前序就能确定一棵树了。

题目还说红黑树是“balanced”(平衡的),不用管。

二、整理一下,整个程序要做的是判断以下几点:
1.根结点是否为黑色
2.如果一个结点是红色,它的孩子节点是否都为黑色
3.从任意结点到叶子结点的路径中,黑色结点的个数是否相同
所以分为以下几步:
0. 根据先序建立一棵树,用链表表示(常规的BST的建树方法)
1. 判断根结点(题目所给先序的第一个点即根结点)是否是黑色
2. 根据建立的树,从根结点开始遍历,如果当前结点是红色,判断它的孩子节点是否为黑色,递归返回结果
3. 从根节点开始,递归遍历,检查每个结点的左子树的高度和右子树的高度(这里的高度指黑色结点的个数),比较左右孩子高度是否相等,递归返回结果
 

满分代码

#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
vector<int> arr;
struct node {
    int val;
    struct node *left, *right;
};
//建树
node* build(node *root, int v) {
    if(root == NULL) {
        root = new node();
        root->val = v;
        root->left = root->right = NULL;
    } else if(abs(v) <= abs(root->val))
        root->left = build(root->left, v);
    else
        root->right = build(root->right, v);
    return root;
}
//从根结点开始遍历,如果当前结点是红色,判断它的孩子节点是否为黑色,递归返回结果
bool judge1(node *root) {
    if (root == NULL) return true;
    if (root->val < 0) {
        if (root->left != NULL && root->left->val < 0) return false;
        if (root->right != NULL && root->right->val < 0) return false;
    }
    return judge1(root->left) && judge1(root->right);
}
//求出节点的高度(这里的高度指黑色结点的个数)
int getNum(node *root) {
    if (root == NULL) return 0;
    int l = getNum(root->left);
    int r = getNum(root->right);
    return root->val > 0 ? max(l, r) + 1 : max(l, r);
}
//检查每个结点的左子树的高度和右子树的高度(这里的高度指黑色结点的个数),比较左右孩子高度是否相等,递归返回结果
bool judge2(node *root) {
    if (root == NULL) return true;
    int l = getNum(root->left);
    int r = getNum(root->right);
    if(l != r) return false;
    return judge2(root->left) && judge2(root->right);
}
int main() {
    int k, n;
    scanf("%d", &k);
    for (int i = 0; i < k; i++) {
        scanf("%d", &n);
        arr.resize(n);
        node *root = NULL;
        for (int j = 0; j < n; j++) {
            scanf("%d", &arr[j]);
            root = build(root, arr[j]);
        }
        if (arr[0] < 0 || judge1(root) == false || judge2(root) == false)
            printf("No\n");
        else
            printf("Yes\n");
    }
    return 0;
}

 

 

 

 

MaxEnt物种分布预测中的常见误区与优化技巧:如何提高模型准确率 本文深入探讨了MaxEnt物种分布预测模型从基础应用到精准预测的进阶实践。针对模型准确率提升,文章系统分析了环境变量筛选、模型参数调优、结果批判性解读等核心环节的常见误区,并提供了基于生态位模型原理的深度优化技巧,帮助研究者产出更可靠、可解释的预测结果。 阅读详情

相关推荐

ABAP OO - ALV_TREE例程

项目上比较少有用到ALV_TREE的报表功能,刚好项目上有写了一次,也查阅大量的范例,整合了一写法,给自己做一下笔记。 程序包含功能按钮,按钮下拉,F4帮助,读取选中行,字段双击触发事件,字段前置图标,更新节点,获取节点数据,获取全部子节点,递归算法,DMS模块:创建文档功能,创建文档链接,SNRO创建流水号,缓存数据,下次用户加载进来继续操作。 *&---------------------------------------------------------------------* *&a

大步甩起来 4989

1135. Is It A Red-Black Tree (30)

There is a kind of balanced binary search tree named red-black tree in the data structure. It has the following 5 properties:(1) Every node is either red or black.(2) The root is black.(3) Every leaf ...

weixin_37421387的博客 290

HC32F460 FPU实战:从零开启硬件浮点加速

本文详细介绍了如何在HC32F460开发板上启用和优化FPU(浮点运算单元),以显著提升硬件浮点运算性能。从工程配置、关键代码修改到实战优化技巧,全面解析FPU加速的实现方法,并分享常见问题的解决方案,帮助开发者避免常见陷阱,充分发挥HC32F460的硬件潜力。

weixin_42620340的博客 348

1135 Is It A Red-Black Tree(30 分)

There is a kind of balanced binary search tree named red-black tree in the data structure. It has the following 5 properties: (1) Every node is either red or black. (2) The root is black. (3) Every...

ysq96的博客 1537

从零开始:手把手教你理解UBOOT的BL0、BL1、BL2启动流程

本文详细解析了嵌入式系统中UBOOT启动流程的核心三阶段:BL0、BL1和BL2。BL0作为芯片固化的ROM代码,负责最基础的硬件初始化和加载BL1;BL1(SPL)作为二级程序加载器,在SRAM中运行并初始化DRAM,为加载BL2铺路;BL2则是完整的UBOOT主体,运行于DRAM,负责最终的外设初始化和操作系统引导。文章通过代码示例和流程图,手把手教你理解从芯片上电到系统就绪的完整接力过程。

qsc901234567的博客 1143

RKNN3588——YOLOv8的PT模型转RKNN模型

1. 首先克隆rknn修改后的ultralytics版本项目到本地主要是修改了源码的ultralytics/nn/modules/head.py和ultralytics/engine/exporter.py两个文件。2. 使用修改后的ultralytics对pt模型进行模型转换,此处的format=rknn代表支持rknn后续的转换,而不是用onnx,一定要注意!!!

张飞飞的博客 7171

PAT甲级 1135. Is It A Red-Black Tree (30)

https://www.patest.cn/contests/pat-a-practise/1135 There is a kind of balanced binary search tree named red-black tree in the data structure. It has the following 5 properties: (1) Every node

akibayashi的博客 2569

ubuntu20.04屏幕亮度无法调节(亮度条调节无效)的简单靠谱解决方案及踩坑历程

0 前言   网上关于ubuntu系统亮度无法调节的问题的解决方法有很多,但是绝大部分并没有什么用(这也是我自己的亲身体会),或者并不靠谱。在遍尝各路方法过后,我终于解决了这一棘手的问题(毕竟最大亮度真的非常刺眼,无法长时间直视),在此记录一下踩坑历程以及最后的解决方案。 1 Naive方法   由于使用需要,最近在电脑原有的win10基础上安装了ubuntu双系统。我安装的是当前新版的ubuntu20.04.2.0,靠谱的安装教程可以参考这里。   之前师兄说双ssd安装双系统会有系统启动引导的问题出现,

zeeq的博客 4万+

重温数据结构:深入理解红黑树

读完本文你将了解到: 什么是红黑树黑色高度 红黑树的 5 个特性 红黑树的左旋右旋 指定节点 x 的左旋 右图转成左图 指定节点 y 的右旋左图转成右图 红黑树的平衡插入 二叉查找树的插入 插入后调整红黑树结构 调整思想 插入染红后的调整有 2 种情况 根据 TreeMap 的代码来验证这个过程 红黑树的平衡删除 二叉查找树的删除 删除后的结构调整 调整思想 删除后的调整主要分三步 根据 TreeM

张拭心的博客 shixinzhang 3万+

零基础入门simulink仿真--通信领域的调制解调技术:基于Simulink的PM信号调制与解调仿真建模示例

PM的基本原理是将基带信号(如语音或音乐信号)加载到高频载波信号的相位上。通过改变载波的瞬时相位,可以实现信息的传输。PM的优点包括抗噪声能力强、频谱利用率较高等,但其解调过程相对复杂。通过Simulink,我们可以通过模块化的建模方式实现PM信号的调制和解调过程,并观察信号在信道中的传输效果。通过本指南,我们介绍了如何基于Simulink搭建一个完整的PM信号调制与解调仿真模型,并进行仿真和性能评估。背景介绍:理解PM信号调制与解调的基本原理及其应用。所需工具和环境:列出进行PM仿真所需的工具和环境。

amy_mhd的博客 604

开源鸿蒙具身机器人(ROS2框架):从内核驱动到智能算法的完整实践

本指导文档旨在为开发者提供完整的开源鸿蒙(OpenHarmony)具身机器人开发解决方案,涵盖从底层驱动到上层ROS2应用的全栈开发流程。文档结合OpenHarmony内核驱动移植技术和ROS2机器人操作系统,为具身机器人开发提供详细的技术指导。具身机器人(Embodied Robot)是指具有物理实体、能够感知环境并与之交互的智能机器人系统。感知-决策-执行闭环多模态传感器融合(视觉、听觉、触觉、力觉)实时环境感知与理解智能决策与规划精确运动控制执行具身智能特性物理世界交互能力。

m0_67505153的博客 1268

红黑树

基于https://www.cs.auckland.ac.nz/~jmor159/PLDS210/red_black.html整理   红黑树是个二叉搜索树,结点非黑即红 Red-black trees Trees which remain balanced - and thus guarantee O(logn) search times - in a dynamic environmen

u013571243的专栏 549

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

PAT 1135 Is It A Red-Black Tree

原题链接:1135 Is It A Red-Black Tree (30分) 关键字:红黑树、BST树建树 题目大意: 给出一棵二叉搜索树的前序遍历,请你判断它是否是红黑树。

cwtnice的博客 138

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【PAT 1135. Is It A Red-Black Tree (30)】& 二叉树

Is It A Red-Black Tree (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue There is a kind of balanced binary search tree named red-black tree in the data structure. It h

楚江枫 3139

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

1135 Is It A Red-Black Tree (30 分)

问题描述:给定一颗树的先序,判断是否为红黑树。 解题思路:满足BST,直接插入建树,判断需每个节点都判断,按理来说,只判断根节点到所有叶节点的黑节点个数是否相等即可呀??????? AC代码: #include&lt;iostream&gt; #include&lt;unordered_map&gt; #include&lt;algorithm&gt; #include&lt;cmath&...

lianwaiyuwusheng的博客 582

PAT甲级A1135 Is It A Red-Black Tree (30 分)

There is a kind of balanced binary search tree named red-black tree in the data structure. It has the following 5 properties: (1) Every node is either red or black. (2) The root is black. (3) Every...

vir_lee的博客 443

A1135 Is It A Red-Black Tree (30 分| 红黑树,附详细注释,逻辑分析)

写在前面 思路分析 给一棵二叉搜索树的前序遍历,判断它是否为红黑树,是输出Yes,否则输出No。 红黑树Red-Black Tree特点 1.根结点是否为黑色 判断根结点(题目所给先序的第1个点即根结点)是否是黑色【arr[0] < 0】 2.将NULL看成1个叶子节点,为黑black色 3.如果1个结点是红色,它的孩子节点是否都为黑色 根据建立的树,从根结点开始遍历,如果当前...

kngines 1474

Is It A Red-Black Tree?(判断一棵树是否为红黑二叉树)

以前没接触过这种树,看了别人的代码,加上了详细的注释。 思路全在注释中。 简单把红黑树的五条性质翻译下: 1.每个节点只有两种颜色:非红即黑; 2.根节点是黑色; 3.叶子节点(NULL)是黑色的(对于每个叶子节点来说,他的左右孩子(NULL)都是黑的) 4.若节点为红色,他的所有孩子都是黑色; 5.对于每个节点,从这个节点到每个叶子节点的黑色节点的个数都相同。 ...

weixin_30624825的博客 487

pat1135 Is It A Red-Black Tree (30)(红黑树)

There is a kind of balanced binary search tree named red-black tree in the data structure. It has the following 5 properties: (1) Every node is either red or black. (2) The root is black. (3) Every

人生如梦,浮华一瞬间的专栏 1305

PAT甲级1135----红黑树题解

题目描述 Is It A Red-Black Tree (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue There is a kind of balanced binary search tree named red-black

MarsMine的博客 3869

PAT(A) 1135. Is It A Red-Black Tree (30)

原题目: 原题链接:https://www.patest.cn/contests/pat-a-practise/1135 1135. Is It A Red-Black Tree (30) There is a kind of balanced binary search tree named red-black tree in the data structure...

萧易桥的博客 768

浙大 PAT 1043. Is It a Binary Search Tree (25)

1043. Is It a Binary Search Tree (25) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A Binary Search Tree (BST) is r

凌风 5207

浅析JAVA集合框架之HashMap

数据结构

秀强的专栏 1672

12/2

题型. 1.红黑树2.模拟大数3.前序中序推后序4.模拟题。 1135 Is It A Red-Black Tree (30 分) There is a kind of balanced binary search tree named red-black tree in the data structure. It has the following 5 properties: (1) Eve...

没有期待的日子反而会顺顺利利 233

201909浙大计院软院保研机试题目

PAT考试(patest.cn)甲级的难度和形式,一共600人左右,软院300左右,计院300+,软院28个满分,计院60+个满分。三小时的考试,我是两小时左右拿到了满分,第一个满分的同学只用了60min(考试过程中随时可以看排行榜)。

l503301397的博客 1465
上一篇: 17年秋季第三题 PAT甲级 1138 Postorder Traversal (25分)
下一篇: 18年冬季第三题 PAT甲级 1154 Vertex Coloring (25分) 两种思路
浒鱼鱼
博客等级 码龄11年 287粉丝 70原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值