C语言实现红黑树

本文介绍了如何使用C语言实现红黑树的数据结构,包括节点定义、插入函数、搜索功能以及中序遍历的演示。展示了红黑树的基本操作过程。
摘要由CSDN通过智能技术生成

#include <stdio.h>
#include <stdlib.h>
 
typedef enum { RED, BLACK } Color;
 
typedef struct rb_node_t {
    int key;
    struct rb_node_t *left;
    struct rb_node_t *right;
    struct rb_node_t *parent;
    Color color;
} RBNode;
 
RBNode *rb_search(RBNode *node, int key) {
    while (node != NULL) {
        if (key < node->key)
            node = node->left;
        else if (key > node->key)
            node = node->right;
        else
            return node;
    }
    return NULL;
}
 
RBNode *rb_insert(RBNode *node, int key) {
    if (node == NULL) {
        RBNode *new_node = (RBNode *)malloc(sizeof(RBNode));
        new_node->key = key;
        new_node->left = new_node->right = NULL;
        new_node->parent = NULL;
        new_node->color = RED;
        return new_node;
    }
 
    if (key < node->key) {
        node->left = rb_insert(node->left, key);
        node->left->parent = node;
    } else if (key > node->key) {
        node->right = rb_insert(node->right, key);
        node->right->parent = node;
    }
 
    // 插入后的平衡处理...
 
    return node;
}
 
void inorder_print(RBNode *node) {
    if (node == NULL)
        return;
    inorder_print(node->left);
    printf("%d ", node->key);
    inorder_print(node->right);
}
 
int main() {
    RBNode *root = NULL;
    root = rb_insert(root, 10);
    root = rb_insert(root, 15);
    root = rb_insert(root, 5);
    root = rb_insert(root, 7);
    root = rb_insert(root, 12);
    root = rb_insert(root, 14);
    root = rb_insert(root, 17);
    root = rb_insert(root, 3);
 
    printf("Inorder traversal of the created red-black tree:\n");
    inorder_print(root);
    printf("\n");
 
    RBNode *search_node = rb_search(root, 17);
    if (search_node != NULL)
        printf("Key found: %d\n", search_node->key);
    else
        printf("Key not found\n");
 
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2193410903

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值