美文网首页随便
查找概论3-平衡二叉树AVL

查找概论3-平衡二叉树AVL

作者: eesly_yuan | 来源:发表于2014-08-08 22:41 被阅读183次

    概念


    • 平衡二叉树:是一种二叉排序树,且其每一个节点的左子树与右子树的高度差<=1
    • 平衡因子(balance factor,BF):节点的左子树与右子树的高度差,对于平衡二叉树只有可能是-1,0,1。
    • 插入一个节点导致平衡二叉树失衡,距离这个插入节点最近的,且平衡因子绝对值大于1的节点为根的子树,称为最小不平衡子树,这个概念在构建平衡二叉树的时候很重要。

    平衡二叉树构建

    • 原理:在不断插入的过程中,若某一次导致失衡则,寻找最小不平衡子树,若其BF大于1则右旋,小于-1则左旋。若最小不平衡子树的BF和其子树的BF符号相反,则先将其子树进行一次反向旋转后,再按照上述规则对最小不平衡子树进行旋转。
    • 算法实现:节点数据结构定义如下
    struct BFNode
    {
        int data,BF;
        BFNode * lhs,*rhs;
    };
    

    右、左旋操作如下图所示

    void R_rotate(BFNode * T)
    {
        BFNode * Tl = T->lhs;
        T->lhs = Tl->rhs;
        Tl->rhs = T;
        T = Tl;
    }
    void L_rotate(BFNode * T)
    {
        BFNode * Tr = T->rhs;
        T->rhs = Tr->lhs;
        Tr->lhs = T;
        T = Tr;
    }
    
    右旋.jpg 2.jpg

    具体的左平衡右平衡,还需要对BF进行相应的调整,具体过程参考

    红黑树


    • 红黑树,是一种二叉查找树,满足二叉查找树的一般性质。

    1.在一棵二叉查找树上,执行查找、插入、删除等操作的最佳时间复杂度为O(logn)。
    2.但若退化为一棵具有n个结点的线性链,则此些操作最坏情况运行时间为O(n)。

    • 红黑树,能保证在最坏情况下,基本的动态几何操作的时间均为O(logn)。每个结点内含五个域,color,key,left,right。如果相应的指针域没有,则设为NULL。一棵红黑树是指一棵满足下述性质的二叉搜索树(BST, binary search tree):
      1)每个结点要么是红的,要么是黑的。
      2)根结点是黑的。
      3)每个叶结点,即空结点(NIL)是黑的。
      4)如果一个结点是红的,那么它的俩个儿子都是黑的。
      5)对每个结点,从该结点到其子孙结点的所有路径上包含相同数目的黑结点。
    • 红黑树的统计效率是指:对于随机数据,它进行平衡旋转的次数少,因为它对于平衡的要求没那么严格。这一点提升了插入删除的性能。不过,如果插入数据是顺序数据,红黑树实际会差点。另外,对于查找性能,红黑树总是比AVL差一点,因为它的平均搜索深度会大一些。
    • 一些别人的测试数据结果:AVL树在顺序插入和删除时有20%左右的性能优势,但随机性能反而落后15%左右,现实应用当然一般都是随机情况,所以红黑树得到了更广泛的应用。对AVL树和红黑树的个人理解
    • 红黑树可以参考C#与数据结构--树论--红黑树(RED BLACK TREE)

    Size Balanced Tree SBT


    • Size Balanced Tree(简称SBT)是一种平衡二叉搜索树,它通过子树的大小s[t]来维持平衡性质。它支持很多动态操作,并且都能够在O(log n)的时间内完成。SBT

    reference


    相关文章

      网友评论

        本文标题:查找概论3-平衡二叉树AVL

        本文链接:https://www.haomeiwen.com/subject/tfdetttx.html