左倾红黑树(Left-Leaning Red-Black Trees:LLRBT)解析

左倾红黑树(LLRBT)

1.用普通的平衡二叉树(BST)表示2-3-4树

2.用内部的红边表示3-节点和4-节点(红边指入的节点为红节点)

在这里插入图片描述
在这里插入图片描述
所以我们可以用红黑树来表示2-3-4树。如下:
在这里插入图片描述

注意:对应关系不是唯一的(3个节点可以任意倾斜),对于一棵2-3-4树可能有多种不同的红黑树表示,这是因为对于3-node的表示,红色的边可以向左倾,也可以向右倾。

在这里插入图片描述
所以要考虑很多情况。但是我们只考虑左倾的情况很大大简化实现。
这种树叫做左倾红黑树。
这样任何一颗2-3-4树都可以得到唯一的左倾红黑树。
在这里插入图片描述

以下情况是不允许的:

1.既然是左倾就不能出现右倾3-节点(虽然在标准的红黑树中是允许的,但是这里是左倾红黑树)
在这里插入图片描述
2.连续两个红节点(左倾树的原始版本使用此4节点表示形式,但是新版不允许这四种情况出现,如果出现了就要通过旋转调整)
在这里插入图片描述

红黑树的查找实现与基本BST相同

BST(和LLRB树)搜索实现:

public Value get(Key key)
{
   
Node x = root;
while (x != null)
{
   
int cmp = key.compareTo(x.key);
if (cmp == 0) return x.val;
else if (cmp < 0) x = x.left;
else if (cmp > 0) x = x.right;
}
return null;
}

找一棵树中找最小key

public Key min(){
   
	Node x = root;
	if(x == null){
   
		return null;
	}
	if(x.left == null){
   
		return x.key;
	}
	return min(x.left);
}

左倾红黑树的插入

插入的难点:不仅要插入还要维持红黑颜色。
接下来要介绍以下旋转操作
左旋:
在这里插入图片描述

private Node rotateLeft(Node h) {
   
        // assert (h != null) && isRed(h.right);
        Node x = h.right;
        h.right = x.left;
        x.left = h;
        x.color = x.left.color;
        x.left.color = RED;
        x.size = h.size;
        h.size = size(h.left) + size(h.right) + 1;
        return x;
    }

右旋:
在这里插入图片描述

 private Node rotateRight(Node h) {
   
        // assert (h != null) && isRed(h.left);
        Node x = h.left;
        h.left = x.right;
        x.right = h;
        x.color = x.right.
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值