某些教程不區分普通紅黑樹和左傾紅黑樹的區別,直接將左傾紅黑樹拿來教學,而且稱其爲紅黑樹,由於左傾紅黑樹與普通的紅黑樹相比,實現起來較爲簡單,容易教學。在這裏,咱們區分開左傾紅黑樹和普通紅黑樹。算法
紅黑樹是一種近似平衡的二叉查找樹,從2-3
樹或2-3-4
樹衍生而來。經過對二叉樹節點進行染色,染色爲紅或黑節點,來模仿2-3
樹或2-3-4
樹的3節點和4節點,從而讓樹的高度減少。2-3-4
樹對照實現的紅黑樹是普通的紅黑樹,而2-3
樹對照實現的紅黑樹是一種變種,稱爲左傾紅黑樹,其更容易實現。segmentfault
使用平衡樹數據結構,能夠提升查找元素的速度,咱們在本章介紹2-3-4
樹,再用二叉樹形式來實現2-3-4
樹,也就是普通的紅黑樹。數組
紅黑樹能夠用來做爲字典Map
的基礎數據結構,能夠存儲鍵值對,而後經過一個鍵,能夠快速找到鍵對應的值,相比哈希表查找,不須要佔用額外的空間。咱們以上的代碼實現只有value
,沒有key:value
,能夠簡單改造實現字典。數據結構
Java
語言基礎類庫中的HashMap
,TreeSet
,TreeMap
都有使用到,C++
語言的STL
標準模板庫中,map
和set
類也有使用到。不少中間件也有使用到,好比Nginx
,但Golang
語言標準庫並無它。併發
我是陳星星,歡迎閱讀我親自寫的 數據結構和算法(Golang實現),文章首發於 閱讀更友好的GitBook。數據結構和算法