红黑树

作者: ffusheng | 来源:发表于2017-04-27 13:11 被阅读0次

最近看到讲解红黑树时, 感觉其中代码写得很不错. 自己受益匪浅, 首先STL关联容器中map和set是由红黑树实现的.而符合STL的标准, 则必须提供begin() 和 end() 2个迭代器, 那么在STL的红黑树中是怎么表示这两个迭代器的呢?
红黑树的结点结构:

template<typename T>
struct RBTreeNode{
    T data;
    bool ColorType;
    RBTreeNode *parent;
    RBTreeNode *leftChild;
    RBTreeNode *rightChild;
};

STL用的方法是用一个虚拟的_header结点, 其leftChild指向整棵树中最小的结点(最左结点), 其中rightChild指向整棵树中最大的结点(最右结点). 其parent指向根节点root, 而begin() 所指向的是_header结点的左leftChild结点, 而end()所指向的是虚拟结点_header本身.
初始化如下图所示:

初始化.jpg

插入一个结点:

插入一个结点.jpg

插入n个结点:

插入n个结点.jpg

好, 现在把基础结构描述清楚后, 据可以写具体迭代器++ 和迭代器--的操作了.
本来想写个玩具STL, 更一系列的文章,但学校破事太多,看来只有暑假在做这个事了,平时就写些零散的权当复习准备秋招了。

相关文章

  • 数据结构—树—红黑树

    红黑树概述 红黑树的插入 红黑树的删除

  • TreeMap

    需要先了解红黑树,这是之前分析红黑树的文章。之前在分析红黑树时,我认为红黑树=二叉查找树+红黑平衡,关于二叉查找树...

  • 数据结构与算法-AVL 红黑树

    AVL树AVL树 算法红黑树红黑树 B站

  • [转载]红黑树

    https://zhuanlan.zhihu.com/p/24367771红黑树简介红黑树插入红黑树删除

  • 拿下红黑树

    红黑树 红黑树、2-3树的简单定义: 实现红黑树的基本结构以及添加操作(维护定义,左旋、右旋、颜色反转) 红黑树与...

  • 红黑树

    啥是红黑树,红黑树 = 二叉树

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

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

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

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

  • Golang红黑树

    红黑树 红黑树是每个节点都带有颜色属性(红色或黑色)的二叉查找树。红黑树也属于自平衡二叉查找树。 红黑树具有如下性...

  • 数据结构红黑树添加、修改原理分析

    源码分析大纲 数据结构解析 红黑树试下原理刨析 数据结构解析 1.红黑树 1.1 红黑树概念 红黑树(Red Bl...

网友评论

      本文标题:红黑树

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