什么叫理想平衡二叉树 平衡二叉树是不是必须左小右大
平衡二叉树怎么理解啊?平衡二叉树定义,什么是“理想平衡二叉树?平衡二叉树是什么?能通俗地说一下并举例子吗?什么叫做平衡二叉树?平衡二叉树是什么?
本文导航
二叉树深度是怎么算的
这要涉及到满二叉树与完全二叉树的问题
满二叉树是将一个n层二叉树完全排满的二叉树,第n层有2^n个元素;
n层完全二叉树是将n层满二叉树最后一层从后向前依次去处少于2^n个元素;
完全二叉树是平衡二叉树的一个特例,平衡二叉树是将完全二叉树的最后一层元素任意排在空位上的一种二叉树。
如下图所示,左为满二叉树,右为完全二叉树:
平衡二叉树的调整方法
所谓平衡二叉树是指树中任一结点的左、右子树高度大致相同。平衡二叉树有很多种最著名的是由前苏联数学家Adelse—Velskil和Landis在1962年提出的,称为AVL树。平衡二叉树(AVL树)定义如下:平衡二叉树或者是一棵空树,或者是具有以下性质的二叉排序树:(1)它的左子树和右子树的高度之差绝对值不超过1;(2)它的左子树和右子树都是平衡二叉树。
平衡二叉树构建图解
理想二叉树是一种特殊的满二叉树,其所有叶结点均在同一高度或者同一深度,也即一棵深度(高度)为h且有 2^h-1个结点的二叉树。
如何构造平衡二叉树
简单说就是平衡二叉排序树,也就是首先是二叉排序树,然后还是平衡的。可以这样理解
它要么是一 棵空树,要么是它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树
平衡二叉树构造方法
这要涉及到满二叉树与完全二叉树的问题
满二叉树是将一个n层二叉树完全排满的二叉树,第n层有2^n个元素;
n层完全二叉树是将n层满二叉树最后一层从后向前依次去处少于2^n个元素;
完全二叉树是平衡二叉树的一个特例,平衡二叉树是将完全二叉树的最后一层元素任意排在空位上的一种二叉树。
如下图所示,左为满二叉树,右为完全二叉树:
平衡二叉树是不是必须左小右大
平衡二叉树(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 增加?能否减少树的总层数?那减少纵深只能从横向来想办法,这时候可以考虑用多叉树。