什么叫平衡二叉树,平衡二叉树与完全二叉树区别

http://www.itjxue.com  2023-01-18 11:39  来源:未知  点击次数: 

如何判断一棵二叉树是否是平衡二叉树

平衡二叉树是指一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树,即所有结点,其左右子树高度差不超过1。

判读步骤是:

先计算所有结点的高度,高度是从叶节点开始(其高度为1)自底向上逐层累加的,不同叶子节点计算开始计算时,高度不同取最大值。

然后计算结点左右子树的高度差,如果绝对值都不超过1,就是平衡的。

例子:

A

/ \

B C

/ \

D E

高度是 D:1 E:1 B:2 C:1 A:3,A的高度差为1, B为0 C为0 叶子结点可以不用计算,肯定为0。上述例子的二叉树就是平衡的二叉树。

看一下例子

A

/ \

B C

/ \

D E

/

F

高度是 F:1 D:2 E:1 B:3 C:1 A:4,其中A的左右子树高度差B3 - A1 = 2,高度差大于2,所以不平衡。

当然实际判断是不是平衡二叉树,不一定需要计算每一个结点高度,因为左子树高一点或者右子树高一点,表面看过去还是比较明显的,计算一下比较明显的几个点就可以。

这是平衡二叉树吗?

是的

平衡二叉树,又称AVL树,指的是左子树上的所有节点的值都比根节点的值小,而右子树上的所有节点的值都比根节点的值大,且左子树与右子树的高度差最大为1。因此,平衡二叉树满足所有二叉排序(搜索)树的性质。

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

是的。

衡二叉树(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 增加?能否减少树的总层数?那减少纵深只能从横向来想办法,这时候可以考虑用多叉树。

请简单描述什么是二叉树以及平衡二叉树

简单的说:二叉树就是每一个结点的叶子结点小于两个的树,如

o

/ \

Y Y

平衡二叉树就是每个结点的左右子树高度差不超过2,如:上面的二叉树便是,下面的树就不是平衡二叉树

o

/

o

/

o

其左子树高度是2,右子树是0,高度差为2,不为平衡二叉树。

平衡二叉树

平衡二叉树的定义:

它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树,同时,平衡二叉树必定是二叉搜索树,反之则不一定.

问题1:

把一个升序的数组转换成平衡二叉树

对一个二叉搜索树进行中序遍历就可以得到一个升序的数组,那么反过来考虑,数组的中值即为root,然后数组分为左子树和右子树,继续进行递归即可得出结果.

问题2:

给一个二叉树,判断是否是平衡树

首先写计算二叉树高度的函数

树的高度 = max(左子树高度,右子树高度)+1

可以得到高度后对树递归求解每个节点的左右子树的高度差,如果有大于1的,则return False

(责任编辑:IT教学网)

更多

推荐网页文字特效文章