左倾红黑树的原理及简单实现

(注:以下图片全部源于《算法 第4版》)

左倾红黑树的简介

左倾红黑树(LLRB)是一种类型的自平衡二叉查找树。它是红黑树的变体,并保证对操作相同渐近的复杂性,但被设计成更容易实现。
由于每一棵红黑树都是一颗二叉排序树,因此,在对红黑树进行查找时,可以采用运用于普通二叉排序树上的查找算法,在查找过程中不需要颜色信息。

左倾红黑树的定义

  • 红链接均为左连接
  • 没有任何一个结点同时和两条红链接相连
  • 该树的任意空链接到根结点的路径上的黑链接数量相同。

左倾红黑树与2-3树的对比


红黑树可以看作成是2-3树的一种表现形式,红链接连接的结点可以看作为是一个3-结点。

左倾红黑树的颜色表示

在这里插入图片描述

public class MyRedBlackBST<Key extends Comparable<Key>, Value> {
   
	private static class Node<Key, Value> {
   
		private Key key;
		private Value val;
		private Node<Key, Value> left;
		private Node<Key, Value> right;
		private int colour;
		
		public Node(Key key, Value val, int colour) {
   
            this.key = key;
            this.val = val;
            this.colour = colour;
        }
	}
}

左倾红黑树的一些基本操作

1、颜色判断

private static final int RED = 0;
private static final int BLACK = 1;

private boolean isRed(Node x) {
   
	if (x == null) {
   
		return false;
	}
	return x.colour == RED;
}

2、旋转

左旋转

在这里插入图片描述
在这里插入图片描述

private Node<Key, Value> rotateLeft(Node<Key, Value> x) {
   
	Node<Key, Value> y = x.right;
	x.right = y.left;
	y.left = x;
	y.colour = x.colour;
	x.colour = RED;
	return y;
}

右旋转

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
左倾红黑树和右倾红黑树都是红黑树的变种,它们都是为了避免在插入元素时出现右旋操作而设计的。具体特点和区别如下: 左倾红黑树(Left-Leaning Red-Black Tree): 1. 根节点是黑色的。 2. 所有红色节点都是向左倾斜的。 3. 任意一个节点的左子树中的红色节点个数不会超过右子树中红色节点的个数。 4. 没有两个连续的红色节点,即不存在红色节点的父节点为红色节点。 5. 插入操作只需要进行左旋转,不需要进行右旋转。 右倾红黑树(Right-Leaning Red-Black Tree): 1. 根节点是黑色的。 2. 所有红色节点都是向右倾斜的。 3. 任意一个节点的右子树中的红色节点个数不会超过左子树中红色节点的个数。 4. 没有两个连续的红色节点,即不存在红色节点的父节点为红色节点。 5. 插入操作只需要进行右旋转,不需要进行左旋转。 两者区别: 左倾红黑树和右倾红黑树除了红色节点的倾斜方向不同外,其它特点基本相同。它们的区别主要在于插入操作时需要进行的旋转方式不同,这也决定了它们在一些场景下的性能表现不同。一般来说,左倾红黑树更适合进行插入操作,因为插入时只需要进行左旋转,而左旋转操作是比较轻量级的;而右倾红黑树更适合进行查找操作,因为查找时只需要进行右旋转,而右旋转操作也比较轻量级。但是,具体应用场景还需要根据实际情况来决定。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值