(数据结构)C++实现红黑树

本文介绍了如何使用C++实现红黑树,并通过打印树形结构和效率检验来验证其正确性。实测结果显示,自定义的红黑树在作为set或map容器时,性能比STL中的相应容器快4倍以上。
摘要由CSDN通过智能技术生成
#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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值