红黑树的c语言实现

本文不详述红黑树的原理,而是分享作者在学习红黑树过程中遇到的挑战,特别是理解搜索二叉树和自平衡概念。在实现中,删除操作是最复杂的部分,涉及到rb_tree_delete_fixup函数的使用。文章强调了处理x节点的重要性,以及假设x节点具有额外黑色的思想。建议读者参考《算法导论》和JULY的红黑树文章进行深入学习。
摘要由CSDN通过智能技术生成
    不得不说《算法导论》是一本非常厉害的书!我主要参考了《算法导论》和网络上其他一些优秀的红黑书原理的资料,实现了这个红黑树的代码。很有意义,在整个过程中虽然大部分的时间还是看着书上的伪代码在敲c,但是整个原理已经大致在心中有了一个轮廓,为什么要这么实现红黑树那?前人是怎么想出来的那?路漫漫其修远兮,吾将上下而求索!希望自己有一天也能设计出这么精妙的数据结构算法。这篇文章之后我还将会实现一下avl树,这个树我一直耿耿于怀!先附上一些代码,再说说自己最深的感触。
/*************************************************************************
    > File Name: rb_tree.c
    > Author: jeff zhu
    > Mail: 908190355@qq.com 
    > Created Time: 2016年08月30日 星期二 22时08分53秒
 ************************************************************************/

#include <stdio.h>
#include <limits.h>
#include <malloc.h>

#define RED 1
#define BLACK 2
#define NIL INT_MIN

typedef int EleType;
typedef struct rb_tree_node {
    struct rb_tree_node *parent;
    struct rb_tree_node *left;
    struct rb_tree_node *right;
    EleType key;
    int color;
}NODE;

typedef struct rb_tree {
    NODE *root;
    NODE *nil;
}RBTREE;

void init_rb_tree_root (RBTREE *T) ;
NODE *create_rb_tree_node (RBTREE T , EleType key) ;
void rb_tree_insert (RBTREE *T , NODE *x) ;
void rotate_right (RBTREE *T , NODE *y) ;
void rotate_left (RBTREE *T , NODE *x) ;
void rb_tree_insert_fixup (RBTREE *T , NODE *x) ;
void travel_tree (RBTREE *T , NODE *node) ;
NODE* minimum_rb_tree (RBTREE *T , NODE *x) ;
void rb_tree_delete_fixup (RBTREE *T , NODE *x) ;
void rb_tree_delete (RBTREE *T , NODE *z) ;

int main () {
   RBTREE T;
   init_rb_tree_root (&T);
   NODE *temp;

   int flag;
   while (scanf ("%d" , &flag) , flag != -1) {
       NODE *temp = create_rb_tree_node (T , flag);
       rb_tree_insert (&T , temp);
   }
   rb_tree_delete (&T , T.root);
   travel_tree (&T , T.root);
}

void init_rb_tree_root (RBTREE *T) {
    T->root = NULL;
    T->nil = (NODE *) malloc (sizeof (NODE));
    T->nil->parent = NULL;
    T->nil->left = NULL;
    T->nil->right = NULL;
    T->nil->key = NIL;
    T->nil->color = BLACK;
}

NODE *create_rb_tree_node (RBTREE T , EleType key) { 
    // create a red-black-tree and its default color is RED
    NODE *te
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值