码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【数据结构】红黑树(简单易懂)


    1 总体逻辑

    1.2 二叉树

    二叉树中,一个根节点最多有两个子节点。

    1.3 二叉排序树 Binary Search Tree

    二叉排序树是一个排好序的二叉树。且水平方向来看,总有

    左节点 < 右节点

    简单记忆其规律,可以在脑海中想象一个大大的小于号:

    (图片来自https://icons8.com)

    二叉排序树最大的问题就是不平衡。可以先阅读这篇文章:二叉排序树和平衡二叉树。

    1.4 红黑树 Black Red Tree

    红黑树是二叉排序树的一种。它是为了解决二叉排序树不平衡的问题,以提高增删改查的效率和时间稳定性。说白了,红黑树是为了弥补二叉排序树的缺点而提出的。最近在读Linux相关书籍,了解到Linux CFS进程调度算法就是使用红黑树来组织进程实例的。

    红黑树模型,将所有的二叉树节点分为两种颜色,附加上一些基于颜色的限制规则,基于这些规则调整树的结构,即可保持树的平衡。
    规则/性质有以下⑤条:

    1. 每个结点要么是红的要么是黑的。
    2. 根结点是黑的。
    3. 每个叶结点(叶结点即指树尾端NIL指针或NULL结点)都是黑的。
    4. 如果一个结点是红的,那么它的两个儿子都是黑的。
    5. 对于任意结点而言,其到叶结点树尾端NIL指针的每条路径都包含相同数目的黑结点。

    这五条规则/性质和天书一样,我们应该如何理解?

    顺便说一句,直接上来就说⑤个规则,然后堆一堆代码的所谓教程,就是我们熟悉又厌恶的填鸭式教育。

    我们下面尽可能从本质上去理解红黑树。


    2 优秀资料

    • 清晰理解红黑树的演变—红黑的含义
    • 红黑树动画
    • 快速理解红黑树原理
    • 【力荐】 硬核图解面试最怕的红黑树【建议反复摩擦】

    3 个人理解

    3.1 2-3树与二叉树
    3.2 2-3树与红黑树

    红色节点代表了这个节点与父节点组成3节点。
    黑色节点代表了这个节点是一个独立的2节点。

    2-3树中,3节点用一个圆圈把两个节点圈起来;
    在红黑树中,3节点用黑色父节点+红色子节点表示。

    所以红黑树的插入,删除操作,原理和2-3树是一样的,只是把画圈的操作改为给节点染色了。
    给节点重新染色的过程就是树的深度调整过程。

    3.3 举例
  • 相关阅读:
    LeetCode【第2575题】
    【工具使用】神经网络训练高效可视乎库visdom | 使用方式 概念全梳理
    毕业三年就百万年薪,难道这就是大厂程序员吗?
    [论文阅读]Coordinate Attention for Efficient Mobile Network Design
    基于Springboot的SSM整合案例(详解)
    用已安装好的系统级别PsychoPy软件配置Python虚拟环境
    【html】利用生成器函数和video元素,取出指定时间的视频画面
    基于java百姓点评网的设计与实现计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
    【国密SM2】基于Hutool的SM2公私钥生成、签名验签(二十行代码搞定)
    this 的五种绑定方式(默认 / 隐式 / 显式 / new 构造函数 / 箭头函数)
  • 原文地址:https://blog.csdn.net/u012790503/article/details/126682700
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号