数据结构与算法(十七)树表的查找

当表插入、删除操作较为频繁的时候,为了维护表的有序性,该用动态查找表--特殊树

        表结构是在查找过程中动态生成的

        如果存在被查找值,则返回成功;否则,插入关键字等于key的记录

        根据结构不同分为:二叉排列树、平衡二叉树、红黑树、B-树、B+树、键树

二叉排序树(二叉搜索树、二叉查找树)

                1.若左子树非空,则左子树上结点的值均小于根结点的值

                2.若右子树非空,则右子树上结点的值均大于根结点的值

                3.其左右子树本身又是一颗二叉排序树

        中序遍历非空二叉排序树会得到一个关键字递增有序的序列

        实现查找

BSTree SreachBST(BSTree T,KeyType key){
    if((!T) || key == T->data.key)  return T;//为空,返回NULL
    else if(key < T->data.key)
        return SreachBST(T->lchid,key);//在左子树中继续查找
    else  
        return SreachBST(T->rchild,key);//在右子树中继续查找
}

                比较关键字的次数=此结点所在的层数

                最好情况:ASL=log{_{2}}^{n+1}-1        树的深度为log{_{2}}^{n}⌋+1       时间复杂度为O(log{_{2}}^{n})

                最坏情况:ASL=(n+1)/2        时间复杂度为O(n)

        实现插入

                1.若树中存在,则不再插入

                2.若为空树,则直接插入到根结点

                3.查找直到某个叶子结点的左子树或右子树为空为止,插入到该叶子结点的左孩子/右孩子

        生成实现

                从空树触发,经过一系列查找、插入操作后,生成一颗二叉排序树

        删除实现

                要点:需要重新连接因删除断开的二叉树;防止重新链接后树的高度增加

                实现:     1.叶子结点直接删除

                                2.删除结点只有左子树/右子树,用其左子树/右子树替换

                                3.使用其中序遍历的前趋结点(左子树上值最大的结点)对其进行值替换,然后删除其前趋结点

数据结构与算法(十七)树表的查找_第1张图片数据结构与算法(十七)树表的查找_第2张图片

 

 

       -->

                                4.以其中序遍历的后继结点(右子树上值最小的结点)替换之,然后删除该结点

提升效率:对其进行平衡化处理

        均衡二叉树最好情况:        ASL=log_{2}^{(n+1)}-1        (均衡树)

         均衡二叉树最坏情况:        ASL=(n+1)/2        (单枝树)

        平衡二叉树(AVL)--前提条件:二叉排序树

                1.左子树与右子树的高度之差(BF)绝对值小于或等于1

                2.左子树和右子树也是平衡二叉树

                平衡因子(BF):左子树和右子树的高度差

                        BF = 左子树高度 - 右子树高度

                        二叉树上所有结点的平衡因子只能说-1,0,1

数据结构与算法(十七)树表的查找_第3张图片

                         一颗有n个结点的AVL,其高度保持在O({log_{2}}^{n})数量级,ASL也保持在O({log_{2}}^{n})

                 在平衡二叉树上插入一个结点可能会导致失衡(BF出现2或-2),如果出现失衡状态则需要重新调整二叉树结构使之恢复平衡

        平衡调整(旋转结点)

数据结构与算法(十七)树表的查找_第4张图片

                原则:1.降低高度        2.保持二叉排序树性质

                LL

数据结构与算法(十七)树表的查找_第5张图片

                 RR

数据结构与算法(十七)树表的查找_第6张图片数据结构与算法(十七)树表的查找_第7张图片

                 LR

数据结构与算法(十七)树表的查找_第8张图片数据结构与算法(十七)树表的查找_第9张图片

 

 

 

                 

                 RL

数据结构与算法(十七)树表的查找_第10张图片数据结构与算法(十七)树表的查找_第11张图片

 (P152)

 

你可能感兴趣的:(学习笔记,数据结构,算法)