【C++】:红黑树深度剖析 --- 手撕红黑树!
#include <iostream>
enum Color { RED, BLACK };
struct Node {
int key;
Color color;
Node *left, *right, *parent;
Node(int k) : key(k), color(RED), left(nullptr), right(nullptr), parent(nullptr) {}
};
class RedBlackTree {
private:
Node *root;
void leftRotate(Node *x) {
// 省略实现
}
void rightRotate(Node *x) {
// 省略实现
}
void insertFixup(Node *z) {
// 省略实现
}
Node* treeMinimum(Node *x) {
// 省略实现
return nullptr;
}
Node* treeMaximum(Node *x) {
// 省略实现
return nullptr;
}
void transplant(Node *u, Node *v) {
// 省略实现
}
void rbDeleteFixup(Node *x) {
// 省略实现
}
Node* find(int key) {
// 省略实现
return nullptr;
}
void insert(Node *z) {
// 省略实现
}
void deleteNode(Node *z) {
// 省略实现
}
public:
RedBlackTree() : root(nullptr) {}
void insert(int key) {
Node *z = new Node(key);
if (root == nullptr) {
root = z;
root->color = BLACK;
} else {
insert(z);
}
}
void deleteKey(int key) {
Node *z = find(key);
if (z != nullptr) {
deleteNode(z);
}
}
Node* minimum() {
return treeMinimum(root);
}
Node* maximum() {
return treeMaximum(root);
}
Node* successor(Node *x) {
// 省略实现
return nullptr;
}
Node* predecessor(Node *x) {
// 省略实现
return nullptr;
}
};
int main() {
RedBlackTree rbt;
rbt.insert(10);
rbt.insert(20);
rbt.insert(30);
Node *min = rbt.minimum();
Node *max = rbt.maximum();
Node *succ = rbt.successor(min);
Node *pred = rbt.predecessor(max);
std::cout << "Minimum key: " << min->key << std::endl;
std::cout << "Maximum key: " << max->key << std::endl;
std::cout << "Successor of minimum key: " << (succ ? succ->key : -1) << std::endl;
std::cout << "Predecessor of maximum key: " << (pred ? pred->key : -1) << std::endl;
return 0;
}
这个代码实例展示了如何创建和使用一个简单的红黑树数据结构。它包括了插入、删除、查找最小和最大键值,以及查找后继和前驱节点的基本操作。虽然没有完全实现红黑树的所有功能,但它提供了一个基本框架,可以帮助理解红黑树的原理和实现。
评论已关闭