红黑树底层原理

为什么要有红黑树搜索树性能不稳定达不到logn—>avl树,不好控制–>红黑树
特点:比avl简单但是更抽象
avl树左右高度差不超过1,是严格的平衡树,两个结点就是1
红黑树达到的是近似平衡树保证最长路径不超过最短路径的二倍
红黑树是一种二叉搜索树但是在每个结点上增加一个存储位表示颜色,颜色可以为red/balck通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的------------切记红黑树是近平衡的
红黑树的性质
1每个结点不是黑色就是红色
2根是黑色
3. 如果一个节点是红色的,则它的两个孩子结点是黑色的
4. 对于每个结点,从该结点到其所有后代叶结点的简单路径上,均包含相同数目的黑色结点 —保证了最长路径不超过最短路径的二倍
对结点进行标记,根节点是黑色,一个结点红色孩子一定是黑也就是只有–>红黑 黑黑,没有红红,所以—>
每条路径上有相同路径的黑结点四点约束达到了最长路径不超过最短路径的二倍,
最短路径一定是全黑最长路径一定是黑+红
如图所示
在这里插入图片描述
黑结点的路径为h
2^h-1=n/2~n
h=2logn
严格来说avl快红黑树为2logn,avl树为logn(log以2为底n的对数)
本文也是主要讲的红黑树的插入
因为是每个结点增加一个存储位表示颜色所以定义结点为pair结构最好

template<class K, class V>
struct BSTreeNode
{
	pair<K, V> _kv;
	BSTreeNode<K, V>* _left;
	BSTreeNode<K, V>* _right;

	BSTreeNode(const pair<K, V>& kv)
		:_left(nullptr)
		, _right(nullptr)
		, _kv(kv)
	{}
	};

也是三叉链
template<class K, class V>
struct BSTreeNode//定义结点
{
pair<K, V> _kv;
BSTreeNode<K, V>* _left;
BSTreeNode<K, V>* _right;

BSTreeNode(const pair<K, V>& kv)
	:_left(nullptr)
	, _right(nullp
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值