5平衡二叉树平衡二叉树(balancedbinarytree)是对二叉搜索树的一种改进
二叉搜索树有一个缺点,那就是树的结构事先无法预料,随意性很大,它只与结点的值和插入次序有关,往往得到的是一棵很不“平衡”的二叉树
二叉搜索树与理想平衡树相差越远,树的高度就越高,其运算时间就越长,在最坏的情况下,就是对单链表进行运算的时间,其时间复杂度由O(n)变为O(n),从而部分或全部地丧失了利用二叉搜索树组织数据的优点
为了克服二叉搜索树的这个缺点,需要在插入和删除结点时对树的结构进行必要的调整,使二叉搜索树始终处于一种平衡的状态,即始终成为一种平衡二叉树(balancedbinarytree),简称平衡树
当然它不是理想平衡树,因为那将使调整操作更为复杂,使调整带来的好处得不偿失
本节将首先讨论平衡树的定义和调整操作,然后讨论B_树的定义以及查找、插入和删除等运算
1平衡二叉树的定义平衡二叉树简称平衡树是由阿德尔森一维尔斯基和兰迪斯(Adelson-VelskiiandLandis)于1962年首先提出的,所以又称为AVL树
平衡树的定义是:若一棵二叉树中每个结点的左、右子树的高度至多相差1,则称此树为平衡树
我们把二叉树中每个结点的左子树高度减去右子树的高度定义为该结点的平衡因子(balancefactor),因此,平衡树中每个结点的平衡因子只能是1,0或-1
图7-6(a)是一棵平衡树,图7-6(b)和图7-6(c)分别是一棵非平衡树,每个结点的上方所标数字为该结点的平衡因子
虽然平衡树的平衡性比理想平衡树要差一些,但理论上已经证明:具有n个结点的平衡树的高度在任何情况下决不会比具有相同结点数的理想平衡树高出45%以上
因此,在平衡树上进行查找运算虽比理想平衡树要慢一些,但通常比任意生成的二叉搜索树快得多,当然,其时间复杂度的数量级表示仍为O(n)
1236-11