数据结构 第七章 二叉搜索树(BST BBST AVL树)

二叉搜索树概述

二叉搜索树的词条(结点)由KeyValue构成,且Key可以比较大小,且满足
顺序性:任一结点均不小于其左孩子,不大于其右孩子(此处包括了左右孩子的所有子结点)
单调性:BST的中序遍历必然单调非降,树根结点的左侧子结点必然在遍历中根结点的左侧,右子结点在根结点右侧,所有结点的投影即为BST的中序遍历
在这里插入图片描述

二叉搜索树BST

BST:查找

因为BST是有序的,所以查找结点e即与根结点v比较,如果e小于v则进入左子树,再与左子树根结点比较,如果大于v则进入右子树
在这里插入图片描述
复杂度:
最好情况:O(1)
最坏情况:O(n) 当树退化为单链树,即一条有序向量,则转变为顺序查找

BST:删除

分为待删除结点有单分支和双分支两种情况
单分支:直接删除结点,并用其左孩子代替该点
双分支:找到该结点的后继(即比该节点大一项的结点),交换后继和待删除结点,再转化为单分支情况

BST:平衡与等价

树高渐进不超过O(logn)的称为平衡二叉树BBST
平衡二叉树等价变换:上下可变,局部不变,保持其中序遍历顺序不变,旋转变换为常见的变换,旋转变换有zig(针对左孩子)和zag(针对右孩子)
在这里插入图片描述

AVL树 重平衡

AVL=BBST(平衡二叉搜索树),当AVL树发生删除或插入操作时,会引起AVL树不平衡,使其重新变为BBST的过程称为重平衡
平衡因子 = 左子树高度 - 右子树高度
AVL树的定义:任一结点的平衡因子绝对值不超过1
高度为h的AVL树至少包含fib(h+3)-1个结点,包含n个结点的AVL树的高度应该为O(logn)

AVL树 3+4重构

针对三个结点和四个子树,直接按照其中序遍历的顺序来拼接成变换后的AVL树
在这里插入图片描述

template <typename T> BinNodePosi(T) BST<T>::connect34(BinNodePosi(T) a,BinNodePosi(T) b,BinNodePosi(T) c,BinNodePosi(T) T0,BinNodePosi(T) T1,BinNodePosi(T) T2,BinNodePosi(T) T3)
{
a->lc=T0;if(T0)T0->parent=a;
a->rc=T1;if(T1)T1->parent=a;updateHeight(a);
c->lc=T2;if(T2)T2->parent=c;
c->rc=T3;if(T3)T3->parent=c;updateHeight(c);
b->lc=a;a->parent=b;
a->rc=c;c->parent=b;
return b;
}

使用一下算法视不同情况调用connect34
在这里插入图片描述
AVL树的时间复杂度:
优点 :插入、查找和删除,最坏情况下复杂度均为O(logn),需要O(n)的存储空间
缺点:
1.引入了平衡因子,需要改造数据元素结构,或需要额外封装
2.实测性能与理论性能存在差距
3.单次动态调整之后,全数拓扑结构的变化量可能高达 Ω ( l o g n ) \Omega(logn) Ω(logn)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值