news 2026/5/1 7:30:18

PAT 1135 Is It A Red-Black Tree

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PAT 1135 Is It A Red-Black Tree



这一题的大意是给出一个二叉搜索树,让我们判断是不是红黑树,
只需要按题目要求构造好树,然后判断它是不是符合红黑树的条件即可。
题目给出了红黑树的性质,我们只需要判断它是否满足即可。
需要我们对二叉搜索树,建树,DFS掌握好
完整代码如下:

#include<bits/stdc++.h>#include<iostream>usingnamespacestd;//构造一棵二叉搜索树structnode{intdata;structnode*l;structnode*r;intcolor;};node*tostruct_tree(node*root,intx){if(root==nullptr){root=new(node);root->data=x;if(x>0){root->color=1;//表示黑色}else{root->color=0;//表示红色}root->l=nullptr;root->r=nullptr;}elseif(abs(x)<abs(root->data)){root->l=tostruct_tree(root->l,x);}elseif(abs(x)>abs(root->data)){root->r=tostruct_tree(root->r,x);}returnroot;}intgetBlackHeight(node*x){if(x==nullptr)return1;// NULL节点视为黑色(属性3)// 递归获取左右子树黑高intleft=getBlackHeight(x->l);intright=getBlackHeight(x->r);if(left==-1||right==-1)return-1;// 下层已经发现不合法,继续上传if(left!=right)return-1;// 属性5不满足,黑高不一致// 若当前是黑节点,黑高 +1returnleft+(x->color==1?1:0);}boolisredtree(node*root,boolflag){if(flag==0){if(root->color==0){returnfalse;}flag=1;}if(root!=nullptr&&root->color==0){//红色if(root->l!=nullptr&&root->l->color==0){returnfalse;}if(root->r!=nullptr&&root->r->color==0){returnfalse;}}if(getBlackHeight(root)==-1)returnfalse;if(root->l!=nullptr){if(!isredtree(root->l,1)){// cout<<"1"<<endl;returnfalse;}}if(root->r!=nullptr){if(!isredtree(root->r,1)){returnfalse;}}returntrue;}intmain(){intK;cin>>K;for(inti=0;i<K;i++){intN;cin>>N;node*root=nullptr;for(intj=0;j<N;j++){intx;cin>>x;root=tostruct_tree(root,x);}boolflag=0;if(isredtree(root,flag)){cout<<"Yes"<<endl;}else{cout<<"No"<<endl;}}return0;}

总结:考察树的相关性质,对基本知识点掌握扎实就好做。注意题目要求,我刚开始就自己幻想出多余条件,和理解错题意而写错,在写代码的时候也难免会写出bug,需要有较强的debug能力。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 1:09:00

STM32按键神操作!短按长按稳如狗,回调函数让代码爽到飞起~

STM32按键神操作&#xff01;短按长按稳如狗&#xff0c;回调函数让代码爽到飞起&#xff5e; 做STM32项目时&#xff0c;你是不是也遇到过这些糟心事儿&#xff1f;按键按一下抖三下&#xff0c;短按长按傻傻分不清&#xff0c;想改个功能还得在按键驱动里翻来翻去&#xff0c…

作者头像 李华
网站建设 2026/5/1 7:10:59

k8s修改 Kubelet 配置文件,避免乱驱逐!!!

这个文件是 kubelet 的基础服务文件。但是&#xff0c;请先不要急着直接改这个文件里面的 ExecStart&#xff01; 修改时一定要记得做备份&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; ⚠️ 重要提醒&#xff1a;不要直接改这里&#xff08;99% …

作者头像 李华
网站建设 2026/5/1 7:06:15

什么是嵌入式、单片机、STM32

查看全文&#xff1a;https://www.longkui.site/program/development/mcu-stm32/7123/ 1. 嵌入式系统&#xff08;Embedded System&#xff09; 定义&#xff1a;嵌入式系统是一种专为特定任务设计的计算机系统&#xff0c;通常被嵌入到更大的设备或系统中。它由硬件&#xff0…

作者头像 李华
网站建设 2026/4/22 18:52:12

大模型RL训练更简单?揭秘确定性状态转移带来的算法革新!

简介 本文揭示了通用强化学习与大模型强化学习的核心差异在于状态转移的确定性。传统RL环境中&#xff0c;状态转移通常带有随机性&#xff0c;需要处理高方差、复杂环境建模等问题&#xff1b;而LLM的状态转移是完全确定的&#xff0c;因为状态是已生成的token&#xff0c;动…

作者头像 李华
网站建设 2026/5/1 7:17:06

HyperCeiler完整安装教程:让HyperOS更强大的终极指南

HyperCeiler完整安装教程&#xff1a;让HyperOS更强大的终极指南 【免费下载链接】HyperCeiler Make HyperOS Great Again! 项目地址: https://gitcode.com/gh_mirrors/hy/HyperCeiler 想要让你的HyperOS系统变得更加强大吗&#xff1f;HyperCeiler作为一款专为HyperOS设…

作者头像 李华