【数据结构】二叉排序树 二叉平衡树 红黑树

二叉排序树(二叉查找树)

二叉排序树定义

  1. 若它的左子树不空,则左子树所有节点的值均小于它的根结点的值
  2. 若它的右子树不空,则右子树上所有节点的值均大于它的根结点的值
  3. 它的左右子树也分别为二叉排序树
    eg: 二叉排序树示例图一
    在这里插入图片描述

二叉排序树性能分析

在二叉排序树查找中,成功的查找次数不会超过二叉树的深度,而具有n个结点的二叉排序树的深度,最好为log2n,最坏为n。因此,二叉排序树查找的最好时间复杂度为O(log2n),最坏的时间复杂度为O(n)
在这里插入图片描述

二叉平衡树 (AVL)

二叉平衡树定义

每个结点的 左、右子树的深度之差的绝对值不超过1二叉树排序树为平衡二叉树。
将该结点的左子树深度减去右子树深度的值,称为该结点的平衡因子。一棵二叉排序树中,所有结点的平衡因子只能为0、1、-1时,则该二叉排序树就是一棵平衡二叉树,否则就不是一棵平衡二叉树。
eg: 二叉平衡树示例图
在这里插入图片描述

二叉平衡树的性能

平衡二叉树本身就是一棵二叉排序树,故它的查找与二叉排序树完全相同。但它的查找性能优于二叉排序树,不像二叉排序树一样,会出现最坏的时间复杂度O(n),它的时间复杂度与二叉排序树的最好时间复杂相同,都为O(log2n)

非平衡二叉树的平衡处理

假定向平衡二叉树中插入一个新结点后破坏了平衡二叉树的平衡性。
首先要找出插入新结点后失去平衡的最小子树根结点的指针,然后再调整这个子树中有关结点之间的链接关系,使之成为新的平衡子树。
当失去平衡的最小子树被调整为平衡子树后,原有其他所有不平衡子树无需调整,整个二叉排序树就又成为一棵平衡二叉树。
失去平衡的最小子树是指以离插入结点最近,且平衡因子绝对值大于1的结点作为根的子树。

红黑树

红黑树定义

是一种自平衡二叉查找树,是一种特化的AVL树
是每个结点都带有颜色属性的二叉排序树,颜色或红色或黑色。在二叉排序树强制一般要求以外,对于任何有效的红黑树增加了如下的额外要求:

  • 结点是红色或黑色。
  • 根结点是黑色。
  • 所有叶子都是黑色。(叶子是NIL结点)
  • 每个红色结点的两个子结点都是黑色。(即从每个叶子到根的所有路径上不能有两个连续的红色结点)
  • 从任一结点到其每个叶子的所有路径都包含相同数目的黑色结点。

红黑树优势

这些约束强制了红黑树的关键性质: 从根到叶子的最长的可能路径不多于最短的可能路径的两倍长
结果是这个树大致上是平衡的。因为操作比如插入、删除和查找某个值的最坏情况时间都要求与树的高度成比例,这个在高度上的理论上限允许红黑树在最坏情况下都是高效的,而不同于普通的二叉查找树。就二叉平衡树来说它有不需要严格的二叉平衡,相对不需要平凡处理失衡子树。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值