數據結構之紅黑樹Java實現

【本文是爲了梳理知識的總結性文章,總結了一些自認爲相關的重要知識點,只爲鞏固記憶以及技術交流,忘批評指正。其中參考了很多前輩的文章,包括圖片也是引用,如有冒犯,侵刪。】

紅黑樹的進化歷程

第一階段:樹

樹是一種常用的數據結構,它是一個由有限節點組成的一個具有層次關係的集合,數據就存在樹的這些節點中。最頂層只有一個節點,稱爲根節點。在分支處有一個節點,指向多個方向,如果某節點下方沒有任何分叉的話,就是葉子節點。從某節點出發,到葉子節點爲止,最長簡單路徑上邊的條數,稱爲該節點的高度;從根節點出發,到某節點邊的條數,稱爲該節點的深度。

樹結構的特點如下:
(1)一個節點,即只有根節點,也可以是一棵樹。
(2)其中任何一個節點與下面所有節點構成的樹稱爲子樹。
(3)根節點沒有父節點,而葉子節點沒有子節點。
(4)除根節點外,任何節點有且僅有一個父節點。
(5)任何節點可以有0 ~ n個子節點。

第二階段:二叉樹

二叉樹是指至多有兩個子節點的樹。二叉樹具有以下幾個性質:

  1. 二叉樹中,第 i 層最多有 2 ^ (i-1) 個結點。
  2. 如果二叉樹的深度爲 K,那麼此二叉樹最多有 2^k - 1 個結點。
  3. 二叉樹中,終端結點數(葉子結點數)爲 n0,度爲 2 的結點數爲 n2,則 n0=n2+1。

二叉樹,本質上,是對鏈表和數組的一個折中,數組的搜索比較方便,可以直接用下標,但刪除或者插入某些元素就比較麻煩。  鏈表與之相反,刪除和插入元素很快,但查找很慢。  二叉排序樹就既有鏈表的好處,也有數組的好處。 

二分法是經典的問題拆解算法,二叉樹是近似於二分法的一種數據結構實現,二叉樹是高效算法實現的載體,在整個數據結構領域具有舉足輕重的地位。在二叉樹的世界中,最爲重要的概念是平衡二叉樹、二叉查找樹、紅黑樹。

平衡二叉樹

........

 

 

參考文獻

  1. http://data.biancheng.net/view/192.html
  2. https://tech.meituan.com/2016/12/02/redblack-tree.html
  3. https://github.com/CarpenterLee/JCFInternals/blob/master/markdown/5-TreeSet%20and%20TreeMap.md
  4. https://www.zhihu.com/question/37381035
  5. 《碼出高效:Java開發手冊》
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章