RB-Tree(红黑树,Red-Back Tree)的C语言算法实现

本文档提供了红黑树(Red-Black Tree)的C语言实现,包括源文件red_back_tree.h和源代码red_back_tree.cpp,详细阐述了红黑树的插入和删除操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

源文件:red_back_tree.h

#ifndef _RED_BACK_TREE
#define _RED_BACK_TREE

#include <iostream.h>
	 
#define BLACK 0
#define RED 1

typedef struct _RBNode{
	int key;
	int color;
	struct _RBNode *parent, *leftchild, *rightchild;
} RBNode,*RBTree;

static RBNode _Nil = {0, BLACK, NULL, NULL, NULL};
const static RBTree Nil = &_Nil;

#define EQ(x, y)  ((x)->key==(y)->key)
#define LT(x, y) ((x)->key < (y)->key)
#define RBTREE_SIZE sizeof(RBNode) 

/* 根据关键字集合创建RBTree */
int create_RBTree(RBTree &T, int keys[], int n);
/* 左旋 */
void L_Rote(RBTree &T, RBTree x);
/* 右旋 */
void R_Rote(RBTree &T, RBTree x);
/* 将新节点插入到RBTree中 */
int insert_to_RBTree(RBTree &T, RBTree node);
/* 调整插入T的z结点 */
void fixup_insert_RBTree(RBTree &T, RBTree z);
/* 找到关键字所对应的节点 */
RBTree find_RBTree(const RBTree T, int key);
/* 删除z元素,并返回真正被删除结点的指针。要求z为T中一存在的结点~ */
RBTree delete_from_RBTree(RBTree &T, RBTree z);
/* 删除以key为关键字的结点,~若成功,则返回1,否则返回0. */
int delete_from_RBTree(RBTree &T, int key);
/* 当删除x的原父亲之后,调整x */
void fixup_delete_RBTree(RBTree &T, RBTree x);
/* 先序遍历RBTree */
void pre_order_RBTree(const RBTree T);
void _pre_order_RBTree(const RBTree T);
#endif


 

源代码:red_back_tree.cpp

#include "red_back_tree.h"
#include <stdio.h>
#include <iostream.h>
#include <stdlib.h>
#include <memory.h>

int create_RBTree(RBTree &T, int keys[], int n)
{
	RBTree p = NULL;
	for(int i = 0; i < n; i++)
	{
		if(!(p=(RBTree) malloc (RBTREE_SIZE)))
		{
			exit(-1);
		}
		p->left
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值