二叉排序树的查找性能取决于二叉排序树的形状,在O(log 2n)和 O(n)之间
平均查找次数的实现:
平衡二叉树:或者是一棵空的二叉排序树,或者是具有下列性质的二叉排序树:
(1)根节点的左子树和右子树平衡因子最多相差一;
(2)根节点的左右子树也都是二叉平衡树。
平衡因子:
节点的平衡因子是该点的左子树深度与右子树的深度之差
最小不平衡子树:
在平衡二叉树构造过程中,以距离插入最近的、且平衡因子的绝对值大于1的节点为根的子树。
为啥是绝对值呢?
可以是左树减右树,也可以是右树减左树
构造平衡二叉树思想:每插入一个节点
(1):从插入节点开始向上计算各节点的平衡因子,如果某节点的平衡因子的绝对值超过1,说明插入操作破坏了二叉排序树的平衡性,需要进行平衡调整;否则继续执行插入操作。
(2):如果二叉排序树不平衡,则找出不平衡因子树的根节点,根据新插入的节点与最小不平衡子树根节点之间的关系判断调整类型。
(3):根据调整类型进行相应的调整,使之成为新的平衡子树。
对于不平衡的树进行旋转
节点A为最小不平衡子树的根节点,对该子树进行平衡调整有这4种情况
(1)LL型
实例:顺时针旋转
(2)RR型
LL型和RR型都遵循一个扁担原理,哪边重就将哪边往上提,根往下压。
(3)LR型
实例中是因为根节点左子树的右子树不平衡引起的
调整
(4)RL型
构造平衡二叉树的步骤:
(1):计算平衡因子
(2):判断平衡性
(3):若不平衡,找出最小不平衡的根节点
(4):判断调整类型
(5):根据调整类型进行调整