1 / 5
文档名称:

AVL树非递归算法.docx

格式:docx   页数:5页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

AVL树非递归算法.docx

上传人:df158687 2015/5/13 文件大小:0 KB

下载得到文件列表

AVL树非递归算法.docx

相关文档

文档介绍

文档介绍:AVL树非递归算法
AVL树是一种平衡的二叉搜索树,平衡因子是衡量树平衡程度的一个参数。当结点的平衡因子(本文中结点平衡因子=左子树高度-右子树高度)绝对值大于1时,我们说这个结点是不平衡的,因此需要进行旋转使之重新平衡。
结点不平衡通常是由于对AVL树进行插入或者删除结点时造成的。下面我们分别对插入和删除时的旋转和平衡因子的更新进行讨论。
一、插入
对一棵AVL树插入一个结点时,需要从根结点开始,通过比较插入结点和AVL树结点的值,确定插入的位置。这个操作和BST树的插入操作相同。如图,向一棵AVL树插入一个值为8的结点(红色连线为比较路径)。
1100
5
200
1100
1100
5
200
1100
8
1
0
1
0
1
0
0
0
0
插入前插入后
上图中插入后AVL树种各结点平衡因子的绝对值不大于1,所以不需要进行旋转,下面我们这种讨论插入的四种旋转方式和平衡因子更新。
AVL非递归插入算法描述:
1、第一步,按平衡二叉树规则插入一个结点,在插入的同时找最后一个有可能不平衡的结点。
1、左旋转
1100
h
200
h00
h
0
0
-1
0
0
1100
h
200
h+1100
h
-1
0
-2
0
0
此结点不平衡
200
0
h
0
1100
0
h
0
h+1100
0
左旋转,重新平衡
插入后,旋转前:
旋转后:
插入前:
插入一个值大于20的结点
旋转前后平衡因子变化情况:11(-2->0),20(-1->0)。
2、右旋转
8
0
h
0
1100
1
h
0
h00
0
此结点不平衡
插入前:
8
1
h
0
1100
2
h
0
h+100
0
8
0
h
0
1100
0
h
0
h+100
0
插入后,旋转前:
旋转后:
左旋转,重新平衡
插入一个值小于8的结点
旋转前后平衡因子变化情况:11(2->0),8(1->0)
3、先左后右
根据平衡因子更新情况的不同,我们把先左后右的旋转分成两类。
情况一:
此结点不平衡
插入前:
插入后,旋转前:
左旋转:
7
0
h
0
1100
1
9
0
h
0
h-1
0
h-1
0
7
-1