红黑树叶子节点为什么是黑null_数据结构与算法(10)红黑树上

本文介绍了红黑树的基本概念,包括其特点和创建过程。红黑树是一种特殊的平衡二叉树,用于减少查找消耗。文章详细阐述了红黑树节点颜色规则,并通过插入操作展示了红黑树如何通过改变节点颜色、左旋转和右旋转进行自我修正。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、什么是红黑树

上一篇文章中我们学习了什么是平衡二叉树以及它的用法,今天我们将来学习红黑树。红黑树是一种特殊的平衡二叉树,严格来说它不属于平衡二叉树,但是它和平衡二叉树的目的是一样的,都是为了减少查找时的消耗。在许多项目或是数据结构中,红黑树被频繁使用。红黑树的定义和实现都不是一件简单的事情,希望小伙伴们能耐心研究,也希望能指出我的不足之处。

我们先来了解一下它的特点:

  • 每个节点只有两种颜色:红色和黑色

  • 根节点是黑色的

  • 每个叶子节点(NIL,空节点)都是黑色的空节点

  • 从根节点到叶子节点,不会出现两个连续的红色节点

  • 从任何一个节点出发,到叶子节点,这条路径上都有相同数目的黑色节点

在《算法导论》中给出的这五个定律,我一开始也看得一脸懵逼,因此我们需要结合图来看

2f6f522d2aed344f1b4995b6056bee67.png

如图所示,我们发现红黑树本质上也是一棵二叉查找树。这五个特征看起来很复杂,每一条特征需要对着图看一遍,但同时这样的定义使得这棵树能够保持平衡。

注:我们并不需要对此问为什么,只要知道它是什么。之前搞了很久为什么要这么花里胡哨,才搞明白这其实只是红黑树的性质

2、创建一颗红黑树

二叉树的节点

在二叉排序树的基础上,我们添加了一个 color 的 bool 值,并添加了一系列方法获取当前结点的颜色、获取父节点、将当前结点置换颜色等操作

public final boolean red = true;
    public final boolean black = false;

    private Node root;

    int value;   // 数据
    Node left;
    Node right;
    Node parent;
    boolean color = red;  //颜色,默认为红色

    public Node(int value) {
        this.value = value;
    }

    // 返回当前结点信息,如果 color == true, 则为红色,否则为黑色
    public String getColor() {
        return "" + value + "=>" + (this.color == true ? "red":"black" );
    }

    public Node findParent() {
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值