尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

AcWing 1628:判断红黑树

AcWing 1628:判断红黑树
📅 发布时间:2026/6/20 7:19:20

【题目来源】
https://www.acwing.com/problem/content/1630/

【题目描述】
数据结构中有一类平衡的二叉搜索树,称为红黑树。
它具有以下 5 个属性:
(1)节点是红色或黑色。
(2)根节点是黑色。
(3)所有叶子都是黑色。(叶子是 NULL节点)
(4)每个红色节点的两个子节点都是黑色。
(5)从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
例如,下列三张图中,左图中的二叉树是红黑树,其余两图中的二叉树不是红黑树。

AcWing1628

现在,对于每个给定的二叉搜索树,请你判断它是否是合法的红黑树。
注意:给定的前序遍历序列可能不合法,即无法构建出合法二叉搜索树。

【输入格式】
第一行包含整数 K,表示共有 K 组测试数据。
每组测试数据,第一行包含整数 N,表示二叉搜索树的节点数量。
第二行给出了这个二叉搜索树的前序遍历。
注意,虽然所有节点的权值都为正,但是我们使用负号表示红色节点。
各节点权值互不相同。
输入样例与题目中三个图例相对应。

【输出格式】
对于每组数据,如果是合法红黑树则输出一行 Yes,否则输出一行 No。​​​​​​​

【输入样例】
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​​​​​​​

【输出样例】
Yes
No
No​​​​​​​

【数据范围】
1≤K≤30,
1≤N≤30​​​​​​​

【算法分析】
● 红黑树性质助记口诀:左根右、根叶黑、不红红、黑路同。
● 利用先序、中序遍历序列求后序遍历序列的示意图,以及计算图中 x、y 值的过程,如下所示。其中:
pl:先序遍历左端点位置,pr:先序遍历右端点位置。
il:中序遍历左端点位置,ir:中序遍历右端点位置。

先序中序

【算法代码】

#include<bits/stdc++.h>
using namespace std;unordered_map<int, int> pos;
const int maxn=35;
int pre[maxn],in[maxn];
bool ans;int build(int il,int ir,int pl,int pr,int& sum) {int rt=pre[pl];int k=pos[abs(rt)];if(k<il || k>ir) {ans=false;return 0;}int le=0,ri=0,ls=0,rs=0;if(il<k) le=build(il,k-1,pl+1,pl+1+k-1-il,ls);if(k<ir) ri=build(k+1,ir,pl+1+k-1-il+1,pr,rs);if(ls!=rs) ans=false;sum=ls;if(rt<0) {if(le<0 || ri<0) ans=false;} else sum++;return rt;
}int main() {int T;cin>>T;while(T--) {int n;cin>>n;for(int i=0; i<n; i++) {cin>>pre[i];in[i]=abs(pre[i]);}sort(in,in+n);pos.clear();for(int i=0; i<n; i++) pos[in[i]]=i;ans=true;int sum; //number of black nodesint rt=build(0,n-1,0,n-1,sum);if(rt<0) ans=false;if(ans) cout<<"Yes\n";else cout<<"No\n";}return 0;
}/*
in:
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 17out:
Yes
No
No
*/




【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/119108633
https://blog.csdn.net/hnjzsyjyj/article/details/145047068
https://www.cnblogs.com/xjtfate/p/16603241.html
https://www.acwing.com/solution/content/145808/
https://blog.csdn.net/hnjzsyjyj/article/details/155001635

相关新闻

  • Nginx日志配置
  • linux c 内核
  • linux c xml

最新新闻

  • DeepTutor:你的智能学习伙伴,让AI辅导无处不在
  • 鸿蒙 Next 相亲防骗雷达 App 开发实战:防骗教育 + 交互式自测 + 内容驱动设计
  • 免熏蒸木箱个性化方案哪家好? - 工业品牌热点
  • 嵌入式音频设计:I2S/SAI时序解析与低功耗模式实战
  • 呼伦贝尔市2026年最新黄金回收+白银回收+铂金回收+彩金回收门店TOP排行榜+推荐及联系方式+地址+电话+靠谱店铺指南 - 大熊猫898989
  • Codex 如何使用更高效:一篇讲透实战方法的博文

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号