用C语言实现红黑树
红黑树是一种自平衡的二叉搜索树。它在插入和删除操作时能够自动保持平衡,时间复杂度为 O(log n)。红黑树在计算机科学中有重要应用,在 STL 的 map 和 set 以及 Linux 内核中都有应用。
红黑树的特点:
- 每个节点要么是红色,要么是黑色。
- 根节点是黑色的。
- 所有叶子节点都是黑色的(叶子节点是指NIL节点)。
- 如果一个节点是红色的,则它的两个子节点都是黑色的。
- 对于任意节点而言,其到叶子节点的每条路径都包含相同数量的黑色节点。
下面是一个简单的实现红黑树的代码示例:
#ifndef _RED_BLACK_TREE_H
#define _RED_BLACK_TREE_H
typedef struct Node {
int key; // 节点键值
int color; // 节点颜色:0表示黑色,1表示红色
struct Node* left; // 左子节点
struct Node* right; // 右子节点
struct Node* parent; // 父节点
} Node;
typedef struct RedBlackTree {
Node* root; // 根节点
Node* nil; // 叶子节点
} RedBlackT