深入理解红黑树

作者: 鸿雁长飞鱼龙潜跃 | 来源:发表于2019-06-06 13:31 被阅读107次

红黑树大学学过,但是只是在脑海里留下了一个印象,具体细节还是说不上来。最近在画各种数据结构图,发现不是很清楚红黑树的特性,还真画不出来。

先来回顾一下红黑树的概念。

一,什么是红黑树

红黑树是一种自平衡二叉查找树。典型的用途是实现关联数组。

什么是自平衡呢?自平衡指的是在新增、删除节点元素的时候,红黑树能够自动调整达到平衡的状态。

二,红黑树的特性

红黑树是具有下列着色性质的二叉查找树:

1,每一个节点,要么是红色,要么是黑色。

2,根节点是黑色。

3,如果一个节点是红色的,那么它的2个子节点必须是黑色。关于这一点,要说明一下,如果一个节点是黑色,那么它的子节点可以是黑色,也可以是红色。并且,还可以2个节点都是红色或者都是黑色。

4,从一个节点到一个null引用的每一条路径必须包含相同数目的黑色节点。

上面的规则能够保证:红黑树的高度最多是2log(n+1)。

三,红黑树的自平衡策略

当红黑树增加或者删除节点时,可能会破坏红黑树的平衡状态,此时需要一种机制来保证红黑树达到新的平衡状态,这种机制就叫红黑树的自平衡策略。

红黑树的自平衡策略有三种:左旋转、右旋转、重新着色。

四,为什么使用红黑树

首先,要搞清楚一个关键点,就是红黑树的时间复杂度。红黑树的操作,包括查询,新增,修改,删除,都能保证logn的时间复杂度。这是红黑树能够广泛使用的一个关键点。

五,红黑树的应用场景

1,在Java中, TreeMap,Java 8中HashMap中TreeNode节点都采用了红黑树实现。

2,C++中,STL的map和set也应用了红黑树;

3,Linux进程调度Completely Fair Scheduler;

4,用红黑树管理进程控制块epoll在内核中的实现,用红黑树管理事件块;

5,Nginx中,用红黑树管理timer等;

下面我们结合TreeMap来看一下红黑树的具体实现。

首先看一下TreeMap的Entry<K, V>定义,有6个属性,如下:

K key;

V value;

Entry<K, V> left;

Entry<K, V> right;

Entry<K, V> parent;

boolean color = BLACK; // 新节点默认黑色

六,画一颗红黑树

我们先来看一颗百科上的红黑树。

深入理解红黑树

相关文章

  • 红黑树笔记

    红黑树笔记 红黑树是平衡二叉查找树的一种。为了深入理解红黑树,我们需要从二叉查找树开始讲起。 BST 二叉查找树(...

  • C++boolan part3_week3

    由于对红黑树理解不深,课后对红黑树进行了较深入的探索。 此笔记主要对红黑树进行归纳理解,其中不免参照网上资料 红黑...

  • 数据结构 - 收藏集 - 掘金

    面试旧敌之红黑树(直白介绍深入理解) - Android - 掘金 读完本文你将了解到: 什么是红黑树 黑色高度 ...

  • 深入理解红黑树

    红黑树大学学过,但是只是在脑海里留下了一个印象,具体细节还是说不上来。最近在画各种数据结构图,发现不是很清楚红黑树...

  • 深入理解红黑树

    10 亿 数据量级, 只需 30 多次就能够 查到目标 O(h = log2 n) 1 红黑树: 平衡 二叉排序树...

  • 彻底理解红黑树(二)之 插入

    彻底理解红黑树(一)之 二叉搜索树彻底理解红黑树(二)之 插入彻底理解红黑树(三)之 删除 前言 红黑树的插入情况...

  • 彻底理解红黑树(三)之 删除

    彻底理解红黑树(一)之 二叉搜索树彻底理解红黑树(二)之 插入彻底理解红黑树(三)之 删除 前言 红黑树的删除情况...

  • 红黑树深入剖析及Java实现(转)

    红黑树是平衡二叉查找树的一种。为了深入理解红黑树,我们需要从二叉查找树开始讲起。 BST 二叉查找树(Binary...

  • 二叉查找树-红黑树深入剖析

    红黑树是平衡二叉查找树的一种。为了深入理解红黑树,我们需要从二叉查找树开始讲起。 BST 二叉查找树(Binary...

  • 彻底理解红黑树(一)之二叉搜索树

    彻底理解红黑树(一)之二叉搜索树彻底理解红黑树(二)之插入彻底理解红黑树(三)之删除 1. 二叉搜索树的定义 二叉...

网友评论

    本文标题:深入理解红黑树

    本文链接:https://www.haomeiwen.com/subject/xonyxctx.html