当前位置:文档之家› AVL树非递归算法

AVL树非递归算法

AVL 树非递归算法

AVL 树是一种平衡的二叉搜索树,平衡因子是衡量树平衡程度的一个参数。当结点的平衡因子(本文中结点 平衡因子=左子树高度-右子树高度)绝对值大于1时,我们说这个结点是不平衡的,因此需要进行旋转使之重新平衡。

结点不平衡通常是由于对AVL 树进行插入或者删除结点时造成的。下面我们分别对插入和删除时的旋转和平衡因子的更新进行讨论。

一、插入

对一棵AVL 树插入一个结点时,需要从根结点开始,通过比较插入结点和AVL 树结点的值,确定插入的位置。这个操作和BST 树的插入操作相同。如图,向一棵AVL 树插入一个值为8的结点(红色连线为比较路径)。

插入前 插入后

上图中插入后AVL 树种各结点平衡因子的绝对值不大于1,所以不需要进行旋转,下面我们这种讨论插入的四种旋转方式和平衡因子更新。

AVL 非递归插入算法描述:

1、第一步,按平衡二叉树规则插入一个结点,在插入的同时找最后一个有可能不平衡的结点。

1、左旋转

插入一个值大于20的结点

旋转前后平衡因子变化情况:11(-2->0),20(-1->0)。

2、右旋转

左旋转,重新平衡

左旋转,重新平衡

插入一个值小于8的结点

旋转前后平衡因子变化情况:11(2->0),8(1->0) 3、先左后右

根据平衡因子更新情况的不同,我们把先左后右的旋转分成两类。情况一:

第一类情况:插入的结点大于9

平衡因子更新情况:9(1->0),7(0->1),11(1->0)

情况二:

左旋转:

左旋转:

第二类情况:插入的结点小于9

相关主题
文本预览
相关文档 最新文档