红黑树&平衡二叉搜索树(AVL)

平衡因子:左子树高-右子树高


红黑树(red black tree_RBT)自(相对)平衡二叉查找树
属于二叉平衡查找树
(1)结点是黑色或者红色的
(2)根属性:根节点必须是黑色
(3)红色结点的孩子必须是黑色的,黑色结点的孩子可黑可红(从根出发到空叶子的简单路径,不存在连续红色结点)
(4)空叶子结点是黑色
(5)从根出发到所有空叶子的简单路径中,黑色结点数量相等(包括自身和空叶子)

最短路径是全黑的路径;最长的路径是红黑相间的;
最长路径<2*最短路径
查找的时复OlogN

红黑树的高度最多是2*log(n+1)
黑色高度:到叶子结点经过的非叶子黑色结点个数(黑色结点包括自身)

建树:
(1)初始插入是红色,先用BST的朴素插入法插到红黑树
(2)插完再染色或旋转(建树)
(插入):
    【情况1】如果是空树,直接是黑色树根
    如果不是空树,首先标记成红色
        【情况2】如果父亲结点是黑色就完成了
        如果父亲结点是红色:看父亲的兄弟结点
            【情况3】如果兄弟结点是红色,将父亲和叔叔变成黑色,爷爷变成红色,将爷爷看成新插入的红色结点循环向上更改
            如果兄弟结点是黑色或者null:
                【情况4】裙形:将子树填补完整并计算黑色高度,进行旋转后,保持黑色高度不变的原则涂色,其中局部根节点为黑色,减少迭代向上插入检查


                【情况5】腰形:先旋转化为裙形,再使用上述方法进行。


            

二叉查找树(BST):查找效率同二分查找 
(1)中序序列是一个有序序列
(2)左子树< 根< 右子树
构建:
朴素插入:同查找
旋转:改变树的结构
    右旋:原来的父节点变成了新的右孩子
    左旋:原来的父节点变成了新的左孩子 


平衡二叉查找树(AVL树,绝对平衡):左右子树高度差小于等于1;ASL = h = 查找时复O(logn)
失去平衡:
LL:


RR:

代码思路:

RL:右孩子的左子树插入

 


LR:左孩子的右子树插入

 LR和RL的简化:

直接把C放在根节点处,然后将A及其子树和B及其子树放置在C的子树位置,然后将C的两个子树分别放在A和B的另一个子树位置。


按照朴素插入后发现不平衡,向上寻找根节点的平衡因子,找到第一个最小的不平衡树
最少的结点个数:Nh = (左子树)Nh-1 + Nh-2(右子树) + 1(根)
其中,N0 = 0,N1 = 1,N2 = 2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值