SGI RB-tree深入理解

前言

在学习STL源码之前我也曾无数次尝试理解红黑数的原理,奈何每次都被无情打倒。说实话,红黑树是真的很难理解,需要不断沉淀才能慢慢体会其妙处。这两天看SGI的RB-tree实现,结合侯捷老师的《STL源码剖析》,终于将主要的源码看懂,非常不容易!所以我写一篇文章,来记下理解的过程,可以加深印象,以后还可以迅速重温。

RB-tree概述

RB-Tree是一种被广泛使用的平衡二叉树,也是SGI STL唯一实现的一种搜索树,作为关联性容器的底层机制之用。RB-tree是平衡二叉搜索树的一种,通过特定的操作来保持树的平衡,理解RB-tree之前,建议先理解二叉搜索树的原理,最好是能理解AVL树的原理。

RB-tree定义

所谓RB-tree不仅是一个二叉搜索树,而且必须满足以下规则:

1. 每个节点不是红色就是黑色。

2. 根节点为黑色。

3. 如果节点为红,其子节点必须为黑。

4. 任一节点至NULL(树尾端)的任何路径,所含之黑节点树必须相同。

根据规则4,新增节点必须为红;根据规则3,新增节点之父节点必须为黑。当新节点根据二叉搜索树的规则到达其插入点,却未能符合上述条件时,就必须调旋转树形和调整颜色。

插入节点

 https://www.2cto.com/kf/201609/545894.html

后续。。。

猜你喜欢

转载自www.cnblogs.com/evenleee/p/11689794.html