二叉排序树(二叉查找树)
二叉排序树定义
- 若它的左子树不空,则左子树所有节点的值均小于它的根结点的值
- 若它的右子树不空,则右子树上所有节点的值均大于它的根结点的值
- 它的左右子树也分别为二叉排序树
eg: 二叉排序树示例图一
二叉排序树性能分析
在二叉排序树查找中,成功的查找次数不会超过二叉树的深度,而具有n个结点的二叉排序树的深度,最好为log2n,最坏为n。因此,二叉排序树查找的最好时间复杂度为O(log2n),最坏的时间复杂度为O(n)
二叉平衡树 (AVL)
二叉平衡树定义
每个结点的 左、右子树的深度之差的绝对值不超过1的二叉树排序树为平衡二叉树。
将该结点的左子树深度减去右子树深度的值,称为该结点的平衡因子。一棵二叉排序树中,所有结点的平衡因子只能为0、1、-1时,则该二叉排序树就是一棵平衡二叉树,否则就不是一棵平衡二叉树。
eg: 二叉平衡树示例图
二叉平衡树的性能
平衡二叉树本身就是一棵二叉排序树,故它的查找与二叉排序树完全相同。但它的查找性能优于二叉排序树,不像二叉排序树一样,会出现最坏的时间复杂度O(n),它的时间复杂度与二叉排序树的最好时间复杂相同,都为O(log2n)。
非平衡二叉树的平衡处理
假定向平衡二叉树中插入一个新结点后破坏了平衡二叉树的平衡性。
首先要找出插入新结点后失去平衡的最小子树根结点的指针,然后再调整这个子树中有关结点之间的链接关系,使之成为新的平衡子树。
当失去平衡的最小子树被调整为平衡子树后,原有其他所有不平衡子树无需调整,整个二叉排序树就又成为一棵平衡二叉树。
失去平衡的最小子树是指以离插入结点最近,且平衡因子绝对值大于1的结点作为根的子树。
红黑树
红黑树定义
是一种自平衡二叉查找树,是一种特化的AVL树。
是每个结点都带有颜色属性的二叉排序树,颜色或红色或黑色。在二叉排序树强制一般要求以外,对于任何有效的红黑树增加了如下的额外要求:
- 结点是红色或黑色。
- 根结点是黑色。
- 所有叶子都是黑色。(叶子是NIL结点)
- 每个红色结点的两个子结点都是黑色。(即从每个叶子到根的所有路径上不能有两个连续的红色结点)
- 从任一结点到其每个叶子的所有路径都包含相同数目的黑色结点。
红黑树优势
这些约束强制了红黑树的关键性质: 从根到叶子的最长的可能路径不多于最短的可能路径的两倍长。
结果是这个树大致上是平衡的。因为操作比如插入、删除和查找某个值的最坏情况时间都要求与树的高度成比例,这个在高度上的理论上限允许红黑树在最坏情况下都是高效的,而不同于普通的二叉查找树。就二叉平衡树来说它有不需要严格的二叉平衡,相对不需要平凡处理失衡子树。