news 2026/4/3 6:24:19

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/4/1 4:03:13

Go渲染库unrolled/render:轻松处理HTTP响应的终极方案

Go渲染库unrolled/render&#xff1a;轻松处理HTTP响应的终极方案 【免费下载链接】render Go package for easily rendering JSON, XML, binary data, and HTML templates responses. 项目地址: https://gitcode.com/gh_mirrors/ren/render 你是否遇到过在Go Web开发中…

作者头像 李华
网站建设 2026/3/30 12:23:48

数组的查询方法

查询目的 通过数组查询一些满足条件&#xff08;相等、不等等&#xff09;的元素 有一些方法属于Array静态的方法 使用Array.方法() 有一些方法属于非静态方法使用对象。方法名()&#xff0c;需要去创建对象1 FindIndex() :根据参数2的条件返回第一个满足条件元素的索引值FindI…

作者头像 李华
网站建设 2026/4/3 5:23:15

5分钟掌握视频摘要神器:3步提取B站核心内容的终极指南

在信息爆炸的时代&#xff0c;你是否经常面对30分钟的视频却只想了解3分钟的核心内容&#xff1f;这就是视频摘要技术的价值所在——让智能观看助手帮你从海量内容中快速提取关键信息&#xff0c;实现高效学习与娱乐。 【免费下载链接】BilibiliSummary A chrome extension hel…

作者头像 李华
网站建设 2026/3/28 10:40:52

14、目标枚举工具与技术详解

目标枚举工具与技术详解 在网络安全领域,对目标进行枚举是渗透测试的重要环节。通过各种工具和技术,我们可以收集目标系统的信息,为后续的安全评估和攻击提供依据。本文将详细介绍一些常用的目标枚举工具及其使用方法。 1. Nmap绕过防火墙/入侵检测系统的选项 在渗透测试…

作者头像 李华
网站建设 2026/4/3 6:21:49

Wan2.2-T2V-A14B在新闻摘要视频生成中的实验尝试

Wan2.2-T2V-A14B在新闻摘要视频生成中的实验尝试 你有没有想过&#xff0c;一条突发新闻刚发生不到5分钟&#xff0c;你的手机App就已经推送了一段画质清晰、镜头流畅的短视频&#xff1f;没有记者扛着摄像机&#xff0c;也没有剪辑师熬夜拼接——这一切&#xff0c;靠的是AI“…

作者头像 李华
网站建设 2026/3/11 23:24:36

17、计算机取证:使用Kali和Volatility进行内存分析

计算机取证:使用Kali和Volatility进行内存分析 在计算机安全测试领域,取证是一项关键技术,它有助于我们从系统中恢复可能对安全测试有用的信息。本文将从计算机安全测试员的角度出发,介绍如何使用Kali Linux中的工具进行不同类型的取证工作,重点聚焦于使用Volatility工具…

作者头像 李华