数据结构和算法(Golang实现)(30)查找算法-2-3-4树和普通红黑树

2-3-4树和普通红黑树

某些教程不区分普通红黑树和左倾红黑树的区别,直接将左倾红黑树拿来教学,并且称其为红黑树,因为左倾红黑树与普通的红黑树相比,实现起来较为简单,容易教学。在这里,我们区分开左倾红黑树和普通红黑树。

红黑树是一种近似平衡的二叉查找树,从2-3树或2-3-4树衍生而来。通过对二叉树节点进行染色,染色为红或黑节点,来模仿2-3树或2-3-4树的3节点和4节点,从而让树的高度减小。2-3-4树对照实现的红黑树是普通的红黑树,而2-3树对照实现的红黑树是一种变种,称为左倾红黑树,其更容易实现。

使用平衡树数据结构,可以提高查找元素的速度,我们在本章介绍2-3-4树,再用二叉树形式来实现2-3-4树,也就是普通的红黑树。

三、应用场景

红黑树可以用来作为字典Map的基础数据结构,可以存储键值对,然后通过一个键,可以快速找到键对应的值,相比哈希表查找,不需要占用额外的空间。我们以上的代码实现只有value,没有key:value,可以简单改造实现字典。

Java语言基础类库中的HashMapTreeSetTreeMap都有使用到,C++语言的STL标准模板库中,mapset类也有使用到。很多中间件也有使用到,比如Nginx,但Golang语言标准库并没有它。

系列文章入口

我是陈星星,欢迎阅读我亲自写的 数据结构和算法(Golang实现),文章首发于 阅读更友好的GitBook。

  • 数据结构和算法(Golang实现)(1)简单入门Golang-前言
  • 数据结构和算法(Golang实现)(2)简单入门Golang-包、变量和函数
  • 数据结构和算法(Golang实现)(3)简单入门Golang-流程控制语句
  • 数据结构和算法(Golang实现)(4)简单入门Golang-结构体和方法
  • 数据结构和算法(Golang实现)(5)简单入门Golang-接口
  • 数据结构和算法(Golang实现)(6)简单入门Golang-并发、协程和信道
  • 数据结构和算法(Golang实现)(7)简单入门Golang-标准库
  • 数据结构和算法(Golang实现)(8.1)基础知识-前言
  • 数据结构和算法(Golang实现)(8.2)基础知识-分治法和递归
  • 数据结构和算法(Golang实现)(9)基础知识-算法复杂度及渐进符号
  • 数据结构和算法(Golang实现)(10)基础知识-算法复杂度主方法
  • 数据结构和算法(Golang实现)(11)常见数据结构-前言
  • 数据结构和算法(Golang实现)(12)常见数据结构-链表
  • 数据结构和算法(Golang实现)(13)常见数据结构-可变长数组
  • 数据结构和算法(Golang实现)(14)常见数据结构-栈和队列
  • 数据结构和算法(Golang实现)(15)常见数据结构-列表
  • 数据结构和算法(Golang实现)(16)常见数据结构-字典
  • 数据结构和算法(Golang实现)(17)常见数据结构-树
  • 数据结构和算法(Golang实现)(18)排序算法-前言
  • 数据结构和算法(Golang实现)(19)排序算法-冒泡排序
  • 数据结构和算法(Golang实现)(20)排序算法-选择排序
  • 数据结构和算法(Golang实现)(21)排序算法-插入排序
  • 数据结构和算法(Golang实现)(22)排序算法-希尔排序
  • 数据结构和算法(Golang实现)(23)排序算法-归并排序
  • 数据结构和算法(Golang实现)(24)排序算法-优先队列及堆排序
  • 数据结构和算法(Golang实现)(25)排序算法-快速排序
  • 数据结构和算法(Golang实现)(26)查找算法-哈希表
  • 数据结构和算法(Golang实现)(27)查找算法-二叉查找树
  • 数据结构和算法(Golang实现)(28)查找算法-AVL树
  • 数据结构和算法(Golang实现)(29)查找算法-2-3树和左倾红黑树
  • 数据结构和算法(Golang实现)(30)查找算法-2-3-4树和普通红黑树

你可能感兴趣的:(数据结构和算法(Golang实现)(30)查找算法-2-3-4树和普通红黑树)