#include<stdio.h>
typedef int T1;
struct node {
T1 key, rank; //key是结点的值,rank是后面测试红黑树正确性要用到,可忽略
bool color; //节点颜色
node* left, * right, * pre; //左右子节点、父节点
};
struct rbt {
node* root = NULL, * w; //树根,初始值为NULL
bool red = true, black = false; //红色为真,黑色为假
void pcset(node* p, node* t, bool isleft) {//该函数将p设为t的父节点,若p为NULL则t是树根
(p != NULL ? (isleft ? p->left : p->right) : root) = t;
if (t) t->pre = p;
}
void rotate(node* t, bool isleft) { //旋转函数,isleft决定左旋右旋
node* tmp = isleft ? t->right : t->left;
pcset(t, isleft ? tmp->left : tmp->right, !isleft);
pcset(t->pre, tmp, t->pre && t->pre->left == t);
pcset(tmp, t, isleft);
}
node* find(T1 key) {//按key的值查找函数
node *t=root,*p=NULL;
while (t && t->key != key) t = key < (p = t)->key ? t->left : t->ri
(数据结构)C++实现红黑树
于 2022-03-30 21:39:51 首次发布
本文介绍了如何使用C++实现红黑树,并通过打印树形结构和效率检验来验证其正确性。实测结果显示,自定义的红黑树在作为set或map容器时,性能比STL中的相应容器快4倍以上。
摘要由CSDN通过智能技术生成