红黑树 平衡二叉搜索树

什么是红黑树? (What is a Red-Black Tree?)

Red-Black Tree is a type of self-balancing Binary Search Tree (BST). In a Red-Black Tree, every node follows these rules:

红黑树是一种自平衡二进制搜索树(BST)。 在红黑树中,每个节点都遵循以下规则:

  1. Every node has two children, colored either red or black.每个节点都有两个孩子,颜色为红色或黑色。
  2. Every tree leaf node is always black.每个树叶节点总是黑色的。
  3. Every red node has both of its children colored black.每个红色节点都有两个黑色的子节点。
  4. There are no two adjacent red nodes (A red node cannot have a red parent or red child).没有两个相邻的红色节点(红色节点不能有红色父节点或红色子节点)。
  5. Every path from root to a tree leaf node has the same number of black nodes (called "black height").从根到树叶节点的每条路径都具有相同数量的黑色节点(称为“黑色高度”)。

插入红黑树 (Inserting into Red-Black Trees)

A node is initially inserted into a Red-Black Tree just like any Binary Search Tree. The new node is then given a color of red. After that node has been inserted, the tree must be validated to ensure none of the five properties have been violated. If a property has been violated, there are three potential cases requiring either a left-rotation, right-rotation, and/or a recoloring of the nodes. The cases are dependent on the "uncle" of the current node. Specifically, whether the "uncle" node is black or red. For more info on inserting, the three cases can be found here.

像任何二进制搜索树一样,节点最初会插入到Red-Black树中。 然后,新节点将被赋予红色。 插入该节点后,必须对树进行验证,以确保没有违反这五个属性。 如果违反了属性,则存在三种可能的情况,要求节点向左旋转,向右旋转和/或重新着色。 情况取决于当前节点的“叔叔”。 具体来说,“叔叔”节点是黑色还是红色。 有关插入的更多信息,可以在此处找到这三种情况。

左斜红黑树 (Left-Leaning Red–Black Tree)

A left-leaning red–black (LLRB) tree is a type of self-balancing binary search tree. It is a variant of the red–black tree and guarantees the same asymptotic complexity for operations, but is designed to be easier to implement.

左倾红黑(LLRB)树是一种自平衡二进制搜索树。 它是红黑树的一种变体,可以保证相同的渐进复杂性,但设计起来更易于实现。

左斜红黑树的性质 (Properties of Left Leaning Red-Black Trees)

All of the red-black tree algorithms that have been proposed are characterized by a worst-case search time bounded by a small constant multiple of log N in a tree of N keys, and the behavior observed in practice is typically that same multiple faster than the worst-case bound, close to the optimal log N nodes examined that would be observed in a perfectly balanced tree.

所提出的所有红黑树算法都以最坏情况下的搜索时间为特征,该搜索时间以N个键的树中log N的较小恒定倍数为界,并且在实践中观察到的行为通常快于最坏情况下的边界,接近在理想平衡树中观察到的最优log N节点。

Specifically, in a left-leaning red-black 2-3 tree built from N random keys: ->A random successful search examines log2 N − 0.5 nodes. ->The average tree height is about 2 log2 N

具体来说,在由N个随机键构成的左倾红黑2-3棵树中:->随机成功搜索检查log2 N -0.5个节点。 ->平均树高约为2 log2 N

翻译自: https://www.freecodecamp.org/news/red-black-trees/

红黑树 平衡二叉搜索树

红黑树 平衡二叉搜索树_红黑树:自我平衡的二叉搜索树,并举例说明相关推荐

  1. python随机生成二维列表_对python产生随机的二维数组实例详解

    对python产生随机的二维数组实例详解 最近找遍了python的各个函数发现无法直接生成随机的二维数组,其中包括random()相关的各种方法,都没有得到想要的结果.最后在一篇博客中受到启发,通过列 ...

  2. python制作微信个人二维码_一个python自动生成微信二维码海报的轮子

    由于最近需要做一个线上活动,所以策划了一个微信二维码海报的用户裂变方案.做好了需求以后交给我们可爱的程序媛妹妹.三天过后去问她,她的表情是这样的 她是不是在说,"啊啊,真是不好意思" ...

  3. java二次封装_基于OKhttp+Rxjava2+Retrofit进行二次封装

    概述 基于Retrofit进行二次封装,优雅的初始化设置.基于Okhttp拦截器和基础缓存,封装了无网络和其他所有场景的缓存策略支持,以及频繁调用请求的丢弃策略. 特性 1.基于Retrofit的二次 ...

  4. matlab 二值化_撸了一份 ostu二值化,需要的小伙伴请拿走

    大津法二值化 小发言 本份代码完全自写,由于要输入输出图片,故采用的是matlab语言,但是除了使用imread()和imshow()函数之外,所有代码全部是自己写的,并且与matlab自带库函数做了 ...

  5. 二值化_处理连续型特征:二值化与分段

    preprocessing.Binarizer 根据阈值将数据二值化(将特征值设置为0或1),用于处理连续型变量.大于阈值的值映射为1,而小于或等于阈值的值映射为0.默认阈值为0时,特征中所有的正值都 ...

  6. 如何将多个一维列表转化为二维列表_数据分析2_如何处理一维、二维数据

    吞一块大饼,还不如切成小块吃得香 常见的数据集,要么是数列,要么是表格: 因此,数据分析最首要的是,处理一维.二维数据. 主要知识点可参考如图. 如需要,可点击以下百度网盘链接下载数据分析基础知识图P ...

  7. python api文档生成二维码_使用Python第三方库生成二维码

    本文主要介绍两个可用于生成二维码的Python第三方库:MyQR和qrcode. MyQR的使用: 安装: pip install MyQR 导入: from MyQR import myqr imp ...

  8. java画二维坐标_在图形界面中绘制二维的坐标系统

    在图形界面中绘制二维的坐标系统,其中x轴位于绘图区正中,y轴位于绘图区的最左边.实现以下基本功能: (1)设计界面接受用户输入的实验数据,同时绘制数据点,每个数据点用一个小圆号表示.最后,用直线或曲线 ...

  9. 负载平衡是什么意思_什么是负载平衡?为什么要使用它?

    负载平衡是什么意思 Cloud servers are counted as best to maintain availability of a website and the popularity ...

最新文章

  1. 【数据结构】拓扑排序
  2. 除了Tapd,还有哪些好用的项目管理工具,适用于100+人的大中型团队?
  3. Hadoop HDFS概念学习系列之熟练掌握HDFS的Shell访问(十五)
  4. Free_NAS 0.72 安装中
  5. 8.2.5: Spring3.0新增的@DependsOn和@Lazy
  6. 【算法】Kruskal算法(解决最小生成树问题) 含代码实现
  7. Linq GroupJoin 使用
  8. express基本原理
  9. AutoCAD2020命令提示框信息设置
  10. 全新UI西游H5决战天宫游戏详细图文架设教程
  11. 大小端转换代码(宏、函数方式)(浮点、整数)
  12. 品牌设计与VI设计的不同之处
  13. 微信开发-业务域名、JS接口安全域名、网页授权域名
  14. Negroni源码分析
  15. 幼儿园实时监测控制系统的设计
  16. FileWriter学习
  17. 视频 TS 内容详细讲解
  18. anaconda的kite_Anaconda3详细图文安装教程(附安装包) | 我爱分享网
  19. spring-Cloud-netflix-快速入门(三)-服务间调用
  20. 2022年4月线上终端药品增长迅猛,市场政策合规进程加快

热门文章

  1. 【Salient Object Detection】显著性物体检测资料汇总
  2. SpringBoot—JPA: javax.persistence.TransactionRequiredException
  3. 给定数组,去掉0元素后将剩下的元素赋给新的数组
  4. HTML5中id、name、class 区别
  5. 华科计算机考研复试机试【零散大汇总】
  6. 前端开发 字体样式的演练0229
  7. django-用户文件的上传-后台上传
  8. Gojs学习史(一):基本定义
  9. 关于我对于写博客写文章的理解
  10. spring data jpa封装specification实现简单风格的动态查询