二叉树、AVL树、红黑树

二叉树:

左子树小于根节点,右子树大于根节点。
缺点:当最高子树和最低子树高度相差太多时,查询的时间复杂度太高,变成了O(n)。

AVL树:

平衡二叉树,满足最高子树和最低子树之差不能超过1
在元素插入时,会进行自旋,以满足上面的性质。
缺点:频繁的自旋影响性能,适合插入少,查询为主的场景。

左旋:
在这里插入图片描述

右旋:
在这里插入图片描述

红黑树

最高子树和最低子树高度之差小于2倍即可,如最低子树高度是4,最高子树高度最多是8。
损失了部分查询的性能,来提升插入的性能。
增加了变色特性,来满足插入和查询性能之间的平衡。

性质:

  • 根节点是黑色(根节点是没有父节点的节点)
  • 不能有连在一起的红色节点
  • 红色节点的两个子节点都是黑色
  • 叶子节点(没有左右子树的节点)都是黑色

变换:

  • 变色
  • 左旋
  • 右旋

变换规则:

  • 所有插入的节点都是红色

  • 变色:
    若当前节点的父节点、叔叔节点都是红色:
    把父、叔叔节点都变成黑色。
    把爷爷节点变成红色。

  • 左旋:
    若父节点是红色,叔叔节点是黑色,且当前节点是右子树时,左旋!
    (父节点是上面左旋示意图的E,当前节点是S)

  • 右旋:
    若父节点是红色,叔叔节点是黑色,且当前节点是左子树,右旋!
    注意:右旋要以爷爷节点来旋转,爷爷节点是上面右旋示意图的S,父亲节点是E
    旋转完成后,把父节点变成黑色。
    把爷爷节点变成红色。

视频参考:https://www.bilibili.com/video/av70652717?p=4

发布了40 篇原创文章 · 获赞 1 · 访问量 1082

猜你喜欢

转载自blog.csdn.net/weixin_44495162/article/details/103844272