平衡二叉树 VS 红黑树

一、平衡二叉树

1.定义

为了避免树的高度增长过快,降低二叉排序树的性能,规定在插入和删除结点时,要保证任意结点的左、右子树的高度差的绝对值不超过1

2.插入

插入过程的前半部分与二叉排序树相同,但是在新结点插入后,若造成查找路径上的某个结点不平衡,则需要进行调整。

调整时的原则:只调整最小不平衡子树
将调整的规律可以分为一下四种情形。

①LL型:最小不平衡子树中间结点向上进行一次右单旋

②RR型:最小不平衡子树中间结点向上进行一次左单旋

③LR型:最小不平衡子树第三层结点先向上左单旋,再向上进行右单单旋

④RL型:最小不平衡子树第三层结点先向上右单旋,再向上进行左单单旋



注意(易错):
      
 
 双旋的时候,儿子结点如果如果还有子树,第一次旋转时,其中一个子树会交给父结点,成为父结点的子树。第二次旋转时,剩下的那一棵子树交给爷结点,成为爷结点的其中一课子树。       
        至于在旋转中,哪棵子树给爷,哪棵子树给父,需要考虑到二叉排序的特性。

eg:
 

3.删除

步骤:

①先找到待删除元素的位置,直接删除
②观察删除之后是否破坏了平衡二叉树的性质

③若破坏了,找出最小不平衡子树,接着判型,进行调整。(易错

4.查找

时间复杂度:O(logn)

二、红黑树

由于AVL树非常严格的平衡性,插入和删除的操作后,有可能会非常频繁地调整全树整体拓扑结构,代价较大。
所以再AVL树地平衡标准上进一步放宽条件,就引入了红黑树。

1.定义

根叶黑:根结点、叶结点都是黑色地

不红红:不存在两个相邻地红结点

黑高同:对每个结点,从该结点到任意一个叶结点的简单路径上,所含黑结点的数量相同

左根右满足二叉排序树的性质

相关概念:

        ①黑高:从该结点出发(不含该结点)到达任一叶结点的路径上黑结点的数量

        ②叶结点:在红黑树中,“叶结点”通常指“失败结点”


性质:

        ①从根节点到叶结点的最大路径不大于最短路径的2倍

                由不红红和黑路同推出来,这一点就比平衡二叉树性能好,左右高度\leqslant2倍,而平衡二叉树要求左右高度\leqslant1
 

        ②有n个内部结点的红黑树高度 h\leqslant 2\log (n+1)
                思考:根节点黑高为h的红黑树,内部节点数(关键字)至少有多少个?

                     ==>内部结点数最少的情况---总共h层黑结点的满树形态

                结论:若根节点黑高为h,内部结点数(关键字)最少2^{h}-1

                证明性质②:

                        若红黑树总高度=h,则根节点黑高 \geq h/2,因此内部结点数n\geq 2^{h/2}-1

                    ===> h\leqslant 2\log (n+1)

2.插入

插入步骤思想:

①先查找,确定插入位置(二叉排序树),插入新结点
②新结点是---染为黑色
③新结点非根---染为红色

         若插入结点后依然满足红黑树定义,则插入结束

         若插入结点后不满足红黑树定义,需要调整(看叔叔脸色行事),使其满足红黑树定义

                黑叔 (旋转+染色)   (这一步可以简单类比二叉树转换过程,翻转的元素要染色)

                        LL型:右单旋,然后染色(父换爷,父爷染色)

                        RR型:左单旋,然后染色

                        LR型:左右双旋,然后染色(儿换爷,儿爷染色)

                        RL型:右左双旋,然后染色
                红叔 (染色+变新)
                        叔父爷染色,爷变为新结点。

                    (爷变新后仍要检查爷这个结点是否满足红黑特性,这里用到递归,循环②③



        每次插入时,除了根节点以外,插入的结点都是红色的,所以在插入时,只需要检验有没有破坏不红红这一特性就行了,其他特性不用检验。


红黑树优点:随着树中插入结点的元素变多,需要调整的次数也就变少了

eg:
 

3.删除

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值