操作红黑树的过程

数组中如果使用有序的数组,查找的时候可以使用二分查找,时间复杂度为O(log2n), 当你插入或者删除的时候,需要前移或者后移,时间复杂度为O(n)。
在这里插入图片描述
基于上述信息,提出了BST,这个结构的查找(在平衡的时候)和二分一样,时间复杂度是O(log2n)下去整 + 1, 但是插入和删除的时候不用移动大量的数据。

由于BST不平衡,比如全部插入到右子树,查找的效率相当于链表。为了提高效率,就要让bst尽可能的接近平衡,于是AVL应运而生。AVL树在插入和删除的时候,实时的进行调整以保持结构的平衡,但是由于频繁进行插入删除,导致效率也没有提升太多。因此提出了RBT,它相对AVL要求没有那么严格,所以调整的树的频率没有那么高,但是查找效率是不如AVL的。如果插入和删除没有那么频繁的话,还是建议AVL树。因为RBT的查找效率还是不如AVL的。

红黑树:
定义:
1.整棵树只有红和黑两种颜色的节点
2.叶子节点都是黑色,如果叶子节点也是
3.红色节点不能是相邻的,即红色节点的孩子不能是红色的
4.根节点是黑色的
5.每条路径上黑色节点的个数是一样的
6.红黑树的高度最高为 2 * log(n + 1),底数为2
在这里插入图片描述
因此查找的时间复杂度也是上述公式,和log(n)下取整 + 1 相比要略大,但是总体时间复杂度是差不多的。

相对于AVL的高度,RBT中有一个black height概念,从某一个点开始到叶子节点(空节点不算),他的子树的黑节点的个数

在这里插入图片描述
在这里插入图片描述
bh(X)表示的是最高
第一条:以x为根节点的子树的节点至少满足个数大于 2^bh(x) - 1.
第二条:由于黑节点的儿子和父亲可能是黑节点,但是红节点的相邻节点一定是黑节点,红节点的个数一定小于节点总个数的一半。
在这里插入图片描述
在这里插入图片描述
一直递归求x节点的个数

2 * (2^(bh(x) - 1) - 1) + 1 = 2^bh(x) - 1;

在这里插入图片描述
在这里插入图片描述
插入红黑树过程:如果根节点是空,直接插入黑色节点;如果不空的话,先插入红色节点。
如果父亲节点是红色节点,那么看他的兄弟是不是红色节点,如果是红色节点的话,就把父亲节点、父亲节点的兄弟和祖父节点的颜色互换。
在这里插入图片描述
如果父亲节点是黑色或者是null,那么就要先对红黑树做一下变换,这里的变换有一点类似于AVL树的左右旋转,然后再按照先前的节点重新染色。具体步骤如下图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值