平衡二叉树

个人理解:我们在将一堆数字变成二叉排序树的过程中,会出现失衡节点(后面介绍失衡节点)。我们对树进行旋转变化最终将失衡节点去掉,从而使这颗树更加便于排序查找

二叉排序树

定义

二叉排序树右称二叉查找树。或者为空树,或者是具有以下性质:

(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型调整策略

调整前:
在这里插入图片描述
调整后:
在这里插入图片描述

RL型调整策略

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值