Java – 数据结构 – 红黑树

简介

红黑树是一种自平衡的二叉查找树,是计算机科学中月到的一种数据结构

1972年出现,当时被称之为平衡二买B树。后来,1978年被修改为如今的“红黑树”

它是一种特殊的二叉查找对,红黑树的每一个节点上都有存储位表示节点的颜色

每一个节点可以是红或者黑,红黑树不是高度平衡的,它的平衡是通过“红黑规则”进行实现的。

 

红黑树节点存储结构

包含上级父节点的内存地址

包含节点上的值

包含左子节点的内存地址和右子节点的内存地址,如果为Nil,则相当于为空

包含节点所表示的颜色(红或黑)

 

红黑树规则

要了解红黑树是怎么工作的,首先要先了解红黑树的规则

1.每一个节点或者是红色的,或者是黑色的。

2.根节点必须是黑色的。

3.如果一个节点没有子节点或者父节点,则该节点相应的指针属性值为Nil,这些Nil视为叶节点,每个叶节点(Nil)是黑色的。

4.如果某一节点是红色的,那么它的子节点必须是黑色的(不能出现两个红色节点相连的情况)。

5.对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点。

 

规则①

每一个节点或者是红色的,或者是黑色的。

 

规则②

根节点必须是黑色的。

 

规则③

如果一个节点没有子节点或者父节点,则该节点相应的指针属性值为Nil,这些Nil视为叶节点,每个叶节点(Nil)是黑色的。

 

 

规则④

如果某一节点是红色的,那么它的子节点必须是黑色的(不能出现两个红色节点相连的情况)。

 

 

 

规则⑤

对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点。

所有后代:是指该父节点下所有的子孙节点都是后代

 

叶节点:是指最下面的节点

 

简单路径:是指从根节点到叶节点的单向路径

 

红黑树添加节点

节点关系

首先我们要先了解节点与节点之间的关系

 

 

1.上一层是父节点

2.下一层是子节点

3.上上层是祖父节点

4.隔离是叔节点

 

添加节点时的步骤

 

以伪代码方式讲述

private void 红黑树来衡(Entry<K,V> 当前节点) {
        当前节点的颜色 = 红色;

        while (当前节点 != 空 && 当前节点 != 根 && 当前节点.父节点.颜色 == 红色) {
            if (父节点 == 祖父的左节点) {
                Entry<K,V> y = 祖父的右节点);
                if (祖父的右节点的颜色 == 红) {
                    setColor(父节点, 黑色);
                    setColor(祖父的右节点, 黑色);
                    setColor(祖父节点, 红色);
                    x = 祖父节点;
                } else {
                    if (当前节点 == 父节点的右节点) {
                        x = 父节点;
                        左旋(父节点);
                    }
                    setColor(parentOf(x), 黑色);
                    setColor(parentOf(parentOf(x)), 红色);
                    右旋(parentOf(parentOf(x)));
                }
            } else {
                Entry<K,V> y = 祖父节点的左节点;
                if (colorOf(y) == 红色) {
                    setColor(父节点, 黑);
                    setColor(祖父节点的左节点, 黑色);
                    setColor(祖父节点, 红色);
                    x = 祖父节点;
                } else {
                    if (x == 父节点的左节点) {
                        x = 父节点;
                        rotateRight(父节点);
                    }
                    setColor(parentOf(x), 黑色);
                    setColor(parentOf(parentOf(x)), 红色);
                    rotateLeft(parentOf(parentOf(x)));
                }
            }
        }
        root.color = 黑色;
    }

 

 

 

如果您喜欢本站,点击这儿不花一分钱捐赠本站

这些信息可能会帮助到你: 下载帮助 | 报毒说明 | 进站必看

修改版本安卓软件,加群提示为修改者自留,非本站信息,注意鉴别

THE END
分享
二维码
打赏
海报
Java – 数据结构 – 红黑树
简介 红黑树是一种自平衡的二叉查找树,是计算机科学中月到的一种数据结构 1972年出现,当时被称之为平衡二买B树。后来,1978年被修改为如今的“红黑树” 它是一种特殊的二叉查找对,红黑树的每……
<<上一篇
下一篇>>