平衡二叉树

1、概念

平衡二叉树又称AVL树,是一种特殊的二叉排序树。其左右子树都是平衡二叉树,且左右子树高度之差的绝对值不超过1。一句话表述为:以树中所有结点为根的左右子树的高度之差的绝对值不超过1。为了判断一棵二叉排序树是否是平衡二叉树,引进了平衡因子的概念。平衡隐私是针对树中的结点来说的,一个结点的平衡因子为其左子树的高度减去右子树高度的差,对于平衡二叉树,树中的所有结点的平衡因子的取值只能是-1,0,1三个值。

2、平衡二叉树的建立

建立平衡二叉树的过程和建立二叉排序树的过程基本一样,都是将关键字逐个插入空树中的过程。所不同的是,在建立平衡二叉树的过程中,每插入一个新的关键字都要进行检查,看是否新关键字的插入会使得原平衡二叉树失去平衡,即树中出现平衡因子绝对值大于1的结点。如果失去平衡则需要进行平衡调整。

3、平衡调整

假定向平衡二叉树中插入一个新结点后破坏了平衡二叉树的平衡性,首先要找出插入新结点后失去平衡的最小子树,然后再调整这个子树,使之成为平衡子树。值得注意的是,当失去平衡的最小子树碑调整为平衡子树后,无需调整原有其他所有不平衡子树,整个二叉排序树就会成为一棵平衡二叉树。所谓失去平衡的最小子树是以距离插入结点最近,且平衡因子绝对值大于1的结点作为根的子树。平衡调整有4种情况,分别为LL型,RR型,LR型和RL型。

4、一个例子

以关键字序列{16,3,7,11,9,26,18,14,15}构造一棵AVL树。
(1)先插入16,再插入3,再插入7,至此得到下图:


(2)可以看到此时这棵树已经不平衡了,所以需要对此调整。此时失去平衡的最小子树根结点为16,进行平衡调整,将7作为根结点,3和16分别作为其左右孩子,这样仍能保持跟大于左小于右的特性,这里进行的是LR调整。


(3)再插入下一个结点11,插入结点9,得到下图:


(4)可以看到此时这棵树已经不平衡了,所以需要对此调整。此处失去平衡的最小子树根结点为16,这里进行LL调整,结果如下:


(5)继续插入26,得到:


(6)可以看到此时这棵树已经不平衡了,所以需要对此调整。此时失去平衡的最小子树根结点为7,调整如下,这里进行的是RR调整。


(7)然后插入18,同样得到一颗不平衡的树:


(8)因此需要对其进行调整,此时进行的是RL调整


(9)然后插入14、15,得到图如下:


(10)分析上图的不平衡,再进行LR调整,得到下图。


(11)至此,得到了本文最开始的高度平衡的二叉树,也即AVL树。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容