一、樹的定義
首先給出樹的相關定義:樹(tree)是包含n(n>0)個結點的有窮集,其中:node
- 1)每一個元素稱爲結點(node);
- 2)有一個特定的結點被稱爲根結點或樹根(root);
- 3)除根結點以外的其他數據元素被分爲m(m≥0)個互不相交的集合T1,T2,……Tm-1,其中每個集合Ti(1<=i<=m)自己也是一棵樹,被稱做原樹的子樹。
二、樹的相關術語
- 節點的度:一個節點含有的子樹的個數稱爲該節點的度;
- 葉節點或終端節點:度爲0的節點稱爲葉節點;
- 非終端節點或分支節點:度不爲0的節點;
- 雙親節點或父節點:若一個節點含有子節點,則這個節點稱爲其子節點的父節點;
- 孩子節點或子節點:一個節點含有的子樹的根節點稱爲該節點的子節點;
- 兄弟節點:具備相同父節點的節點互稱爲兄弟節點;
- 樹的度:一棵樹中,最大的節點的度稱爲樹的度;
- 節點的層次:從根開始定義起,根爲第1層,根的子節點爲第2層,以此類推;
- 樹的高度或深度:樹中節點的最大層次;
- 堂兄弟節點:雙親在同一層的節點互爲堂兄弟;
- 節點的祖先:從根到該節點所經分支上的全部節點;
- 子孫:以某節點爲根的子樹中任一節點都稱爲該節點的子孫。
- 森林:由m(m>=0)棵互不相交的樹的集合稱爲森林;
三、二叉樹
二叉樹的定義:算法
- 二叉樹的每一個結點至多隻有二棵子樹(不存在度大於2的結點),
- 二叉樹的子樹有左右之分,次序不能顛倒。
- 二叉樹的第i層至多有2i-1個結點;深度爲k的二叉樹至多有2k-1個結點;
- 對任何一棵二叉樹T,若是其終端結點數爲n0,度爲2的結點數爲n2,則n0=n2+1。
3.1 要點
遍歷:先序遍歷,中序遍歷,後序遍歷。 非遞歸算法:用棧。 深度遍歷算法:鏈表。數據結構
四、滿二叉樹
一棵深度爲k且有2k-1(2的k次冪減1)個結點的二叉樹稱爲滿二叉樹。指針
五、徹底二叉樹
深度爲k的,有n個結點的二叉樹,當且僅當其每個結點都與深度爲k的滿二叉樹中編號從1至n的結點一一對應時,稱之爲徹底二叉樹。blog
六、二叉排序樹
二叉查找樹定義:又稱爲是二叉排序樹(Binary Sort Tree)或二叉搜索樹。二叉排序樹或者是一棵空樹,或者是具備下列性質的二叉樹:排序
-
- 若它的左子樹不空,則左子樹上全部結點的值均小於它的根結點的值;
-
- 若它的右子樹不空,則右子樹上全部結點的值均大於或等於它的根結點的值;
-
- 它的左、右子樹也分別爲二叉排序樹。
七、平衡二叉樹
平衡二叉樹(Balanced Binary Tree)又被稱爲AVL樹。它或者是一棵空樹,或者是具備下列性質的二叉樹:它的左子樹和右子樹都是平衡二叉樹,且左子樹和右子樹的深度之差的絕對值不超過1。(注:平衡二叉樹應該是一棵二叉排序樹)遞歸
注意點
平衡二叉樹的調整索引
八、B樹
B樹又稱爲B-樹,是一種平衡的多路查找樹。B-樹的階是全部結點的孩子結點樹的最大值。一棵m階B-樹,或爲空樹,或爲知足下列特性的m叉樹:圖片
- 1)樹中每一個結點至多有m棵子樹;
- 2)若根節點不是葉子節點,則至少有兩棵子樹;
- 3)除根以外的全部非終端結點至少有[m/2]()向上取整)棵子樹;
- 4)全部的非終端結點中包含下列信息數據:(n,A0,K1,A1,K2,A2,…,Kn,An),其中,n爲結點中的關鍵字樹,A爲指向子樹根結點的指針,K爲關鍵字,且Ai-1所指子樹中全部結點的關鍵字均小於Ki,An所指子樹中全部結點的關鍵字均大於Kn;
- 5)全部的葉子結點都出如今同一層次上,而且不帶信息(能夠看做是外部結點或查找失敗的結點,實際上這些結點不存在,指向這些結點的指針爲空)。下圖爲一棵4階B-樹:
九、B+樹
B+樹是應文件系統所需而出的一種B-樹的變型樹。一棵m階B+樹和m階的B-樹的差別在於:get
- 1)有n棵子樹的結點中含有n個關鍵字,每一個關鍵字不保存數據,只用來索引,全部數據都保存在葉子節點;
- 2)全部的葉子結點中包含了所有關鍵字的信息,及指向含這些關鍵字記錄的指針,且葉子結點自己依關鍵字的大小自小而大順序連接;
十、紅黑樹
一棵紅黑樹是知足下面性質的二叉搜索樹:
- 1)每一個結點或是紅色的,或是黑色的;
- 2)根結點是黑色的;
- 3)每一個葉結點(葉結點即指樹尾端NIL指針或NULL結點)是黑的;
- 4)若是一個結點是紅色的,則它的兩個子結點都是黑色的;
- 5)對每一個結點,從該結點到其全部後代葉結點的簡單路徑上,均包含相同數目的黑色結點。
十一、鍵樹
十二、字典樹
1三、後綴樹
1四、區間樹與線段樹
1五、敗者樹與勝者樹
連接
數據結構中各類樹