平衡二叉树,平衡二叉树是指左右子树的高度差的绝对值

http://www.itjxue.com  2023-01-21 01:24  来源:未知  点击次数: 

平衡二叉树

平衡二叉树(Height-Balanced Binary Search Tree):他也是一种二叉排序树。平衡二叉树是一颗空树或者其中每个结点的左子树和右子树的高度差最多等于1的二叉排序树.这个解决平衡二叉树的算法是由两位俄罗斯数学家G.M.Adelson-Velskii和E.M.Landis在1962年共同发明的,所以平衡二叉树也简称为AVL树。

平衡因子: 将二叉树上结点的左子树深度减去右子树高度的值称为平衡因子BF(Balanced Factor).那么平衡二叉树上所有结点的平衡因子只能是-1,0,1.

平衡二叉树实现原理:在构建二叉排序树的过程中,每当插入一个节点值,先检查是否因插入而破环了树的平衡性,如果破坏了就找出最小不平衡子树。在保持二叉排序树的前提下,调整最小不平衡子树种各个结点之间的链接关系,进行相应的旋转,使之成为新的平衡子树。

原平衡二叉树的平衡被打破后的四种旋转方法:

假设最小不平衡子树的根节点为被破坏结点,新插入的结点叫做破坏节点

1.RR旋转(右单旋):破坏结点在被破坏节点的右子树的右边,因而叫做RR插入。

2.LL旋转(左单旋):破坏节点在被破坏节点的左子树的左边,因而叫做LL插入。

3.LR旋转:破坏结点在被破坏节点的左子树的右边,因而叫做LR插入。

4.RL旋转:破坏节点在被破坏节点的右子树的左边,因而叫做RL插入。

上述四种旋转方式是根据结点的插入位置来命名的,有点绕口。我们不妨这样理解:

当进行RR插入时,就进行左旋操作。也就是对被破坏节点进行逆时针旋转,然后根据二叉排序树的特性对一些结点进行调整。

当进行LL插入时,就进行右旋操作。也就是对被破坏节点进行顺时针旋转,然后根据二叉排序树的特性对一些结点进行调整。

当进行RL插入时,就进行双旋操作。也就是先对最小不平衡子树中以被破坏结点为根节点的子树中做一次右旋转操作,以便让bf值和被破坏结点的bf值符号相同。然后对整颗最小不平衡子树做一次左旋转操作。

当进行LR插入时,就进行双旋操作。也就是先对最小不平衡子树中以被破坏结点为根节点的子树中做一次左旋转操作,以便让bf值和被破坏结点的bf值符号相同。然后对整颗最小不平衡子树做一次右旋转操作。

假设n个结点,则一颗平衡二叉树的深度为log以2为底n的对数。因而深度的数量级为logn。所以平衡二叉树的查找,删除,插入时间复杂度都为O(logn)。

平衡二叉树是二叉排序树吗?

是的。

衡二叉树(balanced binary tree)是一种特殊的二叉排序树,它或者为空树,或者每个结点的左右子树都是平衡二叉树,也就是每个结点的左右子树的高度之差只能是-1,0,1三种情况。

平衡二叉树又称AVL树,是由苏联的Georgy Adelson-Velsky和E.M.Landis发明的,并以他们的名字命名。

平衡二叉树的平衡状况由平衡因子(Balance Factor,BF)来衡量。平衡因子定义为当前结点的左子树高度减去右子树的高度之差,其可能取值只有-1,0,1。叶结点的BF都是0。

平衡二叉树的应用价值:

如果能维持平衡二叉树的结构,检索操作就能在O(log n)时间内完成,实现高效检索。

最小不平衡子树:

距离插入结点最近的,且平衡因子的绝对值大于1的结点为根的子树。(指BF超出合法值)。

最小非平衡子树:

包含插入结点位置,其根结点的BF是1或-1的最小子树。(指BF非0,但BF在合法值范围内)。

以上内容参考:百度百科-平衡二叉查找树

平衡二叉树是什么?

平衡二叉树(AVL)

那对图 1 进行下改造,把数据重新节点重新连接下,图 2 如下:

图 2 可以看到以下特性:

1. 所有左子树的节点都小于其对应的父节点(4,5,6)(7);(4)(5);(8) (9);

2. 所有右子树上的节点都大于其对应的父节点(8,9,10)(7);(6)(5);(10)(9);

3. 每个节点的平衡因子差值绝对值 =1;

4. 每个节点都符合以上三个特征。

满足这样条件的树叫平衡二叉树(AVL)树。

问:那再次查找节点 5,需要遍历多少次呢?

由于数据是按照顺序组织的,那查找起来非常快,从上往下找:7-5,只需要在左子树上查找,也就是遍历 2 次就找到了 5。假设要找到叶子节点 10,只需要在右子树上查找,那也最多需要 3 次,7-9-10。也就说 AVL 树在查找方面性能很好,最坏的情况是找到一个节点需要消耗的次数也就是树的层数, 复杂度为 O(logN)

如果节点非常多呢?假设现在有 31 个节点,用 AVL 树表示如图 3:

图 3 是一棵高度为 4 的 AVL 树,有 5 层共 31 个节点,橙色是 ROOT 节点,蓝色是叶子节点。对 AVL 树的查找来看起来已经很完美了,能不能再优化下?比如,能否把这个节点里存放的 KEY 增加?能否减少树的总层数?那减少纵深只能从横向来想办法,这时候可以考虑用多叉树。

什么是平衡二叉树

平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。构造与调整方法 平衡二叉树的常用算法有红黑树、AVL、Treap、伸展树等。 最小二叉平衡树的节点的公式如下 F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列,可以参考Fibonacci数列 1是根节点 F(n-1)是左子树的节点数量 F(n-2)是右子数的节点数量。

平衡二叉树定义

所谓平衡二叉树是指树中任一结点的左、右子树高度大致相同。平衡二叉树有很多种最著名的是由前苏联数学家Adelse—Velskil和Landis在1962年提出的,称为AVL树。平衡二叉树(AVL树)定义如下:平衡二叉树或者是一棵空树,或者是具有以下性质的二叉排序树:(1)它的左子树和右子树的高度之差绝对值不超过1;(2)它的左子树和右子树都是平衡二叉树。

(责任编辑:IT教学网)

更多

推荐PowerPoint文章