AVL树
AVL树的定义
AVL树是一种高度平衡的二叉搜索树,对每一个节点而言它的左子树右子树高度差最多为1。一棵有n个节点的AVL树高度为O(lgn).
AVL树基本操作
AVL树基本操作和一棵普通二叉树是一样的。一棵普通二叉树实现如下
二叉搜索树
而一棵AVL树满足二叉树的所有性质。所以譬如在寻找最大值(Maximum)、最小值(Minimum)时这类函数没有任何改动。
然而,从AVL的描述种我们可以看出,AVL树的节点比起普通二叉树,多了一个h值(节点高度)。所以,我们需要一个可以在我们进行了改变树高度的操作之后,对树高进行维护的函数。
InsertHeightFixup
InsertHeightFixup应该是一个通用函数,最初我是为Insert操作设计的;后来逐渐发现,所有改变高度的操作都可以由这个函数进行高度维护。
假设我们在一棵AVL树上插入一个节点,那么这个节点一定在树的最低端(正如同一棵普通的二叉搜索树);也就是,这个节点高度为1。那么,可能被这个节点影响高度的,应该是,从这个节点到树根路径上的所有点。
并且,一个节点的高度应该是他的左节点右节点中高度的最大值+1,既x.h=max(x.left.h,x.right.h)+1。所以,在插入一个节点后,为了维护