最近研究了mysql的索引結果,mysql的索引結果是使用了b+ tree的資料結構,了解了結構以後,對索引的功能和使用的一些規則就有了更加深入的了解,原來只是死記硬背規則和策略,現在感覺能知道背後到底是因為什麼。
之後因為看到了set物件的元素存入方式,treeset使用的是紅黑樹儲存,來保證元素不會重複,我大概能理解他的實現原理,但我回頭一想居然發現我對紅黑樹的定義已經完全想不起來了。所以準備對資料結構,尤其是樹做一次知識整理,再整理有關hashmap的原始碼的內容。
我們說到資料結構,首先就會說起樹,那麼樹又是什麼呢?
樹形結構是結點間有分支的層次結構,它是一種常見且很重要的非線性結構。
樹(tree)是由 n(n>0)個結點組成的有限集合 t,如果 t 為空,則它是一顆空樹(null tree)。樹中有乙個特別標出的稱為該樹的根(root)的結點。除根結點之外的其餘結點可分為m(m>0)個互不相交的集合 t1,t2,...,tm,且其中每個集合又是一棵樹,並稱之為根的子樹 subtree。這是乙個遞迴的定義,即在定義中又用到了樹的概念,這也反應了樹的固有特性。
圖 1.32 是兩棵樹的示例。(a)是只有乙個根結點 a 的樹。(b)是一棵由 11 個結點組成的樹 t,其中 a 是根結點,其餘結點分為三個互不相交的子集:t1=,t2=, t3=。t1、t2、t3 也都是樹,且是根 a 的子樹,這三棵子樹的根結點分別是 b、c、d,每棵子樹還可繼續劃分。例如子樹 t1 以 b 為根結點,它的其餘結點又可分為三個互不相交的子集 t11=,圖 1.32 樹的示意圖乙個結點的樹 多結點樹t12=,t13=,其中和又是 b 的子樹,並且僅有乙個根結點。
平衡是指所有葉子的深度基本相同(完全相等的情況並不多見,所以只能趨向於相等) 。
一般來說同乙個節點子樹的深度差不能大於1。
樹的結點(node)
樹的結點包含乙個資料元素及若干個指向其子樹的分支
結點的度和樹的度(degree)
結點的度是結點的子樹的個數。
樹的度是樹中結點度的最大值。
葉子(leaf)和分支結點(branch node)
度為零的結點稱為葉子或終端結點。
不為零的結點稱為分支結點或非終端結點。
孩子(child)、雙親(parent)及兄弟結點(sibling)
某結點的各子樹的根稱為該結點的孩子,而該結點稱為孩子的雙親。
具有相同雙親的結點互稱為兄弟,雙親在同一層的節點又稱為堂兄弟。
一棵樹上除根結點以外的其他結點稱為根的子孫,而從根結點到該結點所經分支上的所有結點稱為該結點的祖先。
結點的層次(level)和樹的深度(depth)
結點的層次值從根算起,根的層次值為 1,其餘結點的層次值為雙親結點層次值加 1。
樹中結點的最大層次值稱為樹的深度或高度。
有序樹(ordered tree)
如果將樹中結點的各子樹看成從左至右是有次序的(即不能互換),則稱該樹為有序樹。否則為無序樹。
在有序樹的最左邊的根稱為第乙個孩子,最右邊的稱為最後乙個孩子。
森林(forest)
m(m≥0)棵互不相交的樹的集合。
對樹中根結點而言,其子樹的集合即為森林。
由此,可用森林和樹相互遞迴的定義來描述樹。
資料結構(一)樹
是由n 0 個結點組成的有窮集合以及結點之間關係組成的集合構成的結構,是一種一對多的資料結構。特點 1.有且僅有乙個結點沒有前驅結點,該結點為樹的根結點。2.除了根結點外,每個結點有且僅有乙個直接前驅結點。3.包括根結點在內,每個結點可以有多個後繼結點。樹的術語 1.結點的度 該結點擁有的子樹的數目...
資料結構綜述
寫在最開始 這是我自己學習的經驗和記錄,有的內容很容易理解,但又比較重要,我會直接摘抄書上的內容 有些比較複雜,我會寫明自己的思考 有些我自己也沒搞懂,我會用紅色文字標明,寫出自己的疑問,也許以後會解決。資料結構的概念 是一門研究非數值計算的程式設計問題中的操作物件,以及它們之間的關係和操作等相關問...
資料結構 樹 (一)
內容來自於 大話資料結構 讀書筆記 樹的儲存結構 第二種 孩子表示法 第三種,孩子兄弟表示法。二叉樹第三,完全二叉樹。二叉樹的性質 二叉樹的儲存結構 樹的定義要注意兩點 節點相關概念 節點的度,葉節點和終端節點,非終端節點或者分支結點,內部節點,樹的度 樹的其他相關概念 樹的深度或者高度就是最大層次...