二叉平衡树

【说明】博客内容选自课件内容和学堂在线邓俊辉老师《数据结构下》

1.  二叉平衡树定义

问题

l二叉排序树的缺点是无法事先预料树的结构,随意性很大,树结构只与结点的值和插入的次序有关,有时会得到一颗很不平衡的二叉树。

l当二叉树与理想的平衡树相差越远,树的高度越高时,其运算的时间就越长。最坏的情况下,二叉树退化成单链表,其时间复杂度由O(log2n)变为O(n)。

二叉平衡树(又称AVL树)

一棵二叉平衡树或者是空树,或者是具有下列性质的二叉排序树:

1。左子树和右子树都是二叉平衡树,

2。左子树和右子树的高度之差的绝对值不超过1

    结点的平衡因子:

            左子树的高度减右子树的高度 。              

二叉平衡树_第1张图片二叉平衡树_第2张图片   

如何构造“二叉平衡树”?

构造平衡的二叉排序树的方法是:

根据初始序列,从空树开始插入新结点插入过程中,在保持二叉排序树特性的前提下,采用平衡旋转技术最小不平衡子树进行调整,使其平衡。

2.  平衡旋转技术

  如果在一棵平衡的二叉搜索树中插入一个新结点,造成了不平衡。此时必须调整树的结构,使之平衡。

  平衡旋转有两类:

       单旋转 (左旋和右旋)     

双旋转 (左平衡和右平衡)

二叉平衡树_第3张图片

 

右单旋转:

  如果在左子树根结点的左子树上插入结点,引起不平衡,则需要进行右单旋转。

  以结点B为旋转轴,将结点A顺时针旋转。

二叉平衡树_第4张图片

左单旋转 :

  如果在右子树根结点的右子树上插入结点,引起不平衡,则需要进行左单旋转

  以结点C为旋转轴,让结点A逆时针旋转。

二叉平衡树_第5张图片

先左后右双旋转

如果在左子树根结点的右子树上插入结点,引起不平衡,则需要进行先左后右双旋转 。

二叉平衡树_第6张图片

先右后左双旋转

如果在右子树根结点的左子树上插入结点引起不平衡,则需要进行先右后左双旋转 。

二叉平衡树_第7张图片

 

3.  二叉平衡树的插入

二叉平衡树_第8张图片

二叉平衡树_第9张图片

双旋插入代码实现:

二叉平衡树_第10张图片

4.二叉平衡树删除

删除单旋:

二叉平衡树_第11张图片

二叉平衡树_第12张图片

删除:双旋

二叉平衡树_第13张图片

 

二叉平衡树_第14张图片

 

二叉平衡树_第15张图片

 

二叉平衡树_第16张图片

你可能感兴趣的:(二叉平衡树)