判断所给二叉树是否是红黑树

本文介绍了如何判断给定的二叉树是否是红黑树。首先总结了红黑树的特性,然后提供了创建红黑树的代码,接着通过递归实现检查是否为二叉搜索树,最后给出判断是否为红黑树的函数,包括检查颜色、平衡性等关键条件。
摘要由CSDN通过智能技术生成

先总结下知识点。

红黑树就是带有颜色的平衡二叉搜索树加五个特殊属性

1,所有节点只能是红或黑色

2,所有叶子都是黑色,并且不存有效数据(如果你要自己构造一个红黑树,叶子节点设置为null就可以,其实就是你的结构存储完所有有效数据后把当前的叶子节点(这些叶子是存有有效数据的)当成内节点,给他们一个构造一个null的叶子节点)

3,根节点只能是黑色

4,每个红节点必有两个子黑节点,即不能有连续的两个红节点

5,树中任一节点到其子树内任意叶子的路径上黑色节点个数相同,此限制也使任意节点的两条叶子路径长度不超过2倍差别

如此,要判断一个给定的二叉树是不是红黑树就是要判断其是不是平衡搜索二叉树(BST)并且满不满足上面5个条件

结构类型:

#define RED 'r'
#define BLACK 'b'


typedef struct T
{
struct T * left;
struct T * right;
struct T * parent;
int key;
char colour;
int data;
}T;

根据输入文件里节点的数据创建红黑树:

void createR_B_BT(FILE* ft,T ** Root)
{
char buf[256]="";
char *ptr=buf,*qtr;
T * Node=NULL,*leaf=NULL;
T * ptrT[100];
int i=1;//,j=0;


memset(ptrT,0,sizeof(ptrT));
while(i==1)
{

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值