红黑树 (一) rotate

红黑树是一种为了解决二叉排序树退化问题而设计的自平衡二叉查找树,其通过遵循5条特定原则保持平衡。本文主要探讨红黑树的左旋和右旋操作,而不涉及颜色调整。
摘要由CSDN通过智能技术生成

二叉排序的操作平均性,和树的高度有关,最差退化成链表,

所以关于二叉排序树的研究就是怎么能平衡树的高度。

红黑树就是一种,工程上可实现。

不过定义有点复杂,要遵循5条原则:

1 节点只有红黑两种颜色

2 根节点是黑色的

3 叶子节点是黑色的

4 红色节点的左右儿子节点必须是黑色的

5 从任意节点触发,不包括该节点,到叶子节点过程中的黑色节点个数一样,也成为黑高度。

规矩多了些,尤其4,5要求黑高,先记着。

有了二叉排序树的基础,本文先实现左右旋转,不讲着色。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef enum enColor
{
	RED,
	BLACK
}Color;

typedef struct stRBNode
{
	int key;
	struct stRBNode* pP;
	struct stRBNode* pL;
	struct stRBNode* pR;
	Color color;
}RBNode;

RBNode Nil = { 0,NULL,NULL,NULL,BLACK };
RBNode* pNil = &Nil;

RBNode* rb_new_node(int key)
{
	RBNode* pNewNode = (RBNode*)malloc(sizeof(RBNode));
	if (pNewNode == NULL) return pNil;

	pNewNode->key = key;
	pNewNode->pL = pNil;
	pNewNode->pR = pNil;
	pNewNode->pP = pNil;
	pNew
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值