红黑树原理和Java实现

本文详细介绍了红黑树的原理,包括其定义、红黑规则、添加节点时如何保持规则,并通过Java代码展示了红黑树的实现过程,帮助读者深入理解这一重要的数据结构。
摘要由CSDN通过智能技术生成

目录

一:红黑树原理

什么是红黑树:

红黑规则:

添加节点:

添加节点时如何保证红黑规则         

 二:Java实现红黑树

红黑树API设计以及代码实现:

测试代码:


一:红黑树原理

什么是红黑树:

红黑树是一个二叉查找树,但不是高度平衡的树

  1. 以前交平衡二叉B树
  2. 每一个节点可以是红或者是黑的
  3. 红黑树不是高度平衡的,它的平衡是根据自己的红黑规则进行实现的

红黑规则:

  1. 每一个节点或是红色的,或者是黑色的;
  2. 根节点必须是黑色;
  3. 如果一个节点没有子节点或者父节点,则该节点相应的指针属性值为Nil,这些Nil视为叶节;点,每个叶节点都是黑色的;
  4. 如果某一个节点是红色的,那么它的子节点必须是黑色(不能出现红色节点相连的情况);
  5. 对于每一个节点,从该节点到其所有后代叶子节点的简单路径(不能回头,只能往前)上,均包含相同数目的黑色节点

 解释一下第5点:我们以17节点为例,我们到15节点的左子节点Nil和右子节点Nil是包含了两个黑色节点,再从17节点到22节点的两个Nil节点也是包含了两个黑色节点。

每一个红黑树的节点都包含下图这些内容

添加节点:

  • 添加的节点的颜色,可以是红色的,也可以是黑色的
  • 添加节点时默认节点颜色为红色,效率是最高的,添加三个元素,一共只需要调整一次,所以添加效率最高

添加节点时如何保证红黑规则         

我们这有十个节点:默认为红色

1. 我们先添加这个20号,因为根节点必须为黑色所以我们将20号颜色改为黑色

2. 现在我们要添加18,因为18比20小,所以添加到20的左子节点上,在添加23号,同理添加到20的右子节点上

 结论1:其父节点为黑色,不需要做任何操作。

 3.继续添加22号,放在23号的左子节点上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玉锵T

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值