平衡二叉树知识点总结
个人理解:我们在将一堆数字变成二叉排序树的过程中,会出现失衡节点(后面介绍失衡节点)。我们对树进行旋转变化最终将失衡节点去掉,从而使这颗树更加便于排序查找
二叉排序树
定义
二叉排序树右称二叉查找树。或者为空树,或者是具有以下性质:
(1)若它的左子树不为空,则左子树所有节点的值小于根结点,
(2)若它的右子树不为空,则根结点的值小于所有右子树结点的值
(3)它的左右子树叶分别为二叉排序树
总结起来就是根据结点的值有:左子树<根结点<右子树
上图中虽然是二叉排序树,但是还是存在失衡节点。也就是存在优化的空间。
平均查找长度
ASL(Average Search Length),即平均查找长度,在查找运算中,由于所费时间在关键字的比较上,所以把平均需要和待查找值比较的关键字次数称为平均查找长度。
平常一堆数的平均查找长度
它的定义是这样的 :
其中n为查找表中元素个数,Pi为查找第i个元素的概率,通常假设每个元素查找概率相同,Pi=1/n,Ci是找到第i个元素的比较次数。
二叉排序树的平均查找长度
折半查找(Binary Search),首先待查找表是有序表,这是折半查找的要求。在折半查找中,用二叉树描述查找过程,查找区间中间位置作为根,左子表为左子树,右子表为右子树,,因为这颗树也被成为判定树(decision tree)或比较树(Comparison tree)。查找方式为(找k),先与树根结点进行比较,若k小于根,则转向左子树继续比较,若k大于根,则转向右子树,递归进行上述过程,直到查找成功或查找失败。在n个元素的折半查找判定树中,由于关键字序列是用树构建的,所以查找路径实际为树中从根节点到被查结点的一条路径,因为比较次数刚好为该元素在树中的层数。所以Pi为查找k的概率,level(Ki)为k对应内部结点的层次。而在这样的判定树中,会有n+!种查找失败的情况,因为将判定树构建为完全二叉树,又有n+1个外部结点(用Ei(0<=i<=n)表示),查找失败,即为从根结点到某个外部结点也没有找到,比较次数为该内部结点的结点数个数之和,所以,qi表示查找属于Ei中关键字的概率,level(Ui)表示Ei对应外部结点的层次。所以,在一颗有n个结点判定树中,总数,所以判定树高度为的满二叉树,第i层上结点个数为,查找该层上的结点需要进行i次比较,因此,在等概率情况下ASL为
前面的基础知识看完了 下面才是平衡二叉树的讲解:
平衡二叉树
定义
平衡因子
每个节点都可作为当前节点来讲,也就是每个节点都有平衡因子。
左子树深度 - 右子树深度=平衡因子
根据平衡二叉树的定义平衡因子只能取0,1,-1。
下面举个例子:
失衡二叉树的调整:
失衡二叉树的四种类型
注意:要看清失衡节点的定义
调整原则
降低高度就是上图中的三层结构调整成了两层。
保持二叉排序树的性质就是满足二叉树中序遍历原则。
LL型调整策略
LL定义:插入的新节点放在失衡节点(图中的数值为5插入后就将变为失衡节点)的左子树的左子树上。
调整策略:中间节点上升,如果中间节点有右子树,那么将右子树变为失衡节点的左子树。检查下是否满足中序规则。
RR型调整策略
RR型与LL型类似,可以进行对比分析。
LR型调整策略
调整前:
调整后: