红黑树学习

一、红黑树简介1972年Rudolf Bayer发明,称为平衡二叉B树(symmetric binary B-trees),在1978年被 Leo J. Guibas 和 Robert Sedgewick 修改为“红黑树”,一种特化的AVL树,在插入和删除时通过特定操作保持二叉查找树的相对平衡,从而获得较高的查找性能。红黑树不是严格的AVL树,只是黑色平衡,如上图所示,根结点P的左子树显然比右子树高,但左子树和右子树的黑结点的层数是相等的。二、红黑树特点符合二叉搜索树基本特性,同时具备以下特性:
摘要由CSDN通过智能技术生成

一、红黑树简介

1972年Rudolf Bayer发明,称为平衡二叉B树(symmetric binary B-trees),在1978年被 Leo J. Guibas 和 Robert Sedgewick 修改为“红黑树”,一种特化的AVL树,在插入和删除时通过特定操作保持二叉查找树的相对平衡,从而获得较高的查找性能。
在这里插入图片描述
红黑树不是严格的AVL树,只是黑色平衡,如上图所示,根结点P的左子树显然比右子树高,但左子树和右子树的黑结点的层数是相等的。

二、红黑树特点

符合二叉搜索树基本特性,同时具备以下特性:

  1. 节点非黑即红 (每个节点要么是黑色,要么是红色)
  2. 其根节点是黑色
  3. 叶子节点是黑色(为了简单期间,一般会省略该节点)
  4. 相邻节点不同为红色(红色节点的子节点必是黑色)
  5. 从一个节点到该节点的下叶子节点的所有路径上包含的黑节点数量相等(这一点是平衡的关键)

在这里插入图片描述

口决:黑根黑叶红不邻,同祖等高只数黑

三、红黑树接口方法

  1. 查找节点
  2. 左旋
  3. 右旋
  4. 插入节点
    • 七种情况处理
    • 五种情况需要考虑自平衡
  5. 删除节点
    • 五种情况处理
    • 两种情况需要考虑自平衡(又细分八种情况,其中四种为镜像情况)

四、插入节点的七种情况

在这里插入图片描述

4.1 情况1

树为空直接创建红黑树

4.2 情况2

父节点为黑,直接添加子节点即可。子节点默认为红色节点。这种情况天生平衡。

4.3 情况3

父节点为红色、叔伯为红色。
在这里插入图片描述

4.4 情况4

父节点红色,叔伯黑色,爷爷、父亲、新节点形成ㄑ型
在这里插入图片描述

4.5 情况5

父节点红色,叔伯黑色,爷爷、父亲、新节点形成 / 型
在这里插入图片描述

4.6 情况6

父节点红色,叔伯黑色,爷爷、父亲、新节点形成 〉型
在这里插入图片描述

4.7 情况7

父节点红色,叔伯黑色,爷爷、父亲、新节点形成 \ 型
在这里插入图片描述

五、删除节点

查找位置、找替代节点、自平衡、真正删除
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、红黑树节点代码

class RBTreeNode {
   
	public int value;
	public boolean isRed;
	public RBTreeNode left;
	public RBTreeNode right;
	public RBTreeNode parent;
	
	public RBTreeNode(int value) {
   
		this.value = value;
		this.isRed = true; 
	}
	public RBTreeNode(int value, boolean isRed) {
   
		this.value = value;
		this.isRed = isRed;
	}
	// public boolean isRed() {
   
	// return isRed;
	// }
	public boolean isBlack() {
   
		return !isRed;
	}
}

七、红黑树的实现

7.1 查找节点

public RBTreeNode find(int value) {
   
	RBTreeNode node = root;
	//根据二叉搜索树的特点进行 查找
	while (node != null) {
   
		if (value == node.value) {
   //找到节点,返回
			
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值