樹的數據結構分類
一、樹
概念定義
- 節點:樹的結點包含一個數據元素及若干指向其子樹的分支
- 節點的度:節點擁有的子樹數量稱爲節點的度(Degree)
- 樹的度:是指樹內個結點的度的最大值
- 孩子與雙親:結點的子樹的根稱爲該結點的孩子(Child),相應地,該結點稱爲孩子的雙親(Parent)
- 兄弟:同一個雙親的孩子之間互稱兄弟(Sibling)
- 節點的祖先:從根到該結點所經分支上的所有結點
- 節點的子孫:對應地,以某結點爲根的子樹中的任一結點都稱爲該結點的子孫
- 樹的層次(Level):從根開始,根爲第一層,根的孩子爲第二層等。。。。
- 樹的深度:樹中結點的最大層次稱爲樹的深度(Depth)或高度
- 森林(Forest) 是m(m≥0)棵互不相交的樹的集合
二、二叉樹(Binary Tree)
定義
它的特點是每個結點至多有兩棵子樹(即二叉樹中不存在度大於2的結點),且二叉樹的子樹有左右之分,其次序不能任意顛倒(有序樹)
性質
- 性質1)在二叉樹的第i層上至多有2i−1個結點(i≥1)。
- 性質2)深度爲k的二叉樹至多有2k−1個結點(k≥1)。
- 性質3)對任何一棵二叉樹,如果其葉子節點數爲n0,度爲2的結點數爲n2,則n0=n2+1。
語言定義:
class TreeNode(object):
def __init__(self,data=None,left=None,right=None):
self.data = data
self.left = left
self.right = right
分類
1.1完全二叉樹
在一棵二叉樹中,除了最後一層,都是滿的,並且最後一層或者是滿的,或者是右邊缺少連續若干節點,成爲完全二叉樹
性質
- 性質4) 具有n個結點的完全二叉樹的深度爲[log2n]+1,其中[x]表示不大於x的最大整數。
- 性質5) 如果對一棵有n個結點的完全二叉樹的結點按層序編號(從第一層到最後一層,每層從左到右),則對任一結點i(1≤i≤n),有:
(1) 如果i=1,則結點i是二叉樹的根,無雙親;如果i>1,則其雙親結點爲[1/2]。
(2) 如果2i>n,則結點i無左孩子;否則其左孩子是結點2i。
(3) 如果2i+1>n,則結點i無右孩子;否則其右孩子是結點2i+1。
1.2滿二叉樹
最後一層也是滿的完全二叉樹
性質
- 深度爲k的滿二叉樹,有2k−1個節點
2.1二叉搜索(查找)樹/排序二叉樹
節點滿足左子樹所有節點<根節點<右子樹所有節點,不存在相等值的節點
2.2平衡二叉樹(BBT)
是一種結構平衡的二叉搜索樹,即葉子節點深度差不超過1,能夠在O(logn)內完成插入、查找和刪除操作,結構如圖所示,常見的平衡二叉樹有AVl樹、紅黑樹等。
2.3自適應平衡二叉搜索樹AVL (Adelson-Velsky-Landis Tree)
2.4紅黑樹
是一種自平衡二叉查找樹,又稱爲“對稱二叉B樹”,除了滿足所有二叉查找樹的要求之外還需要滿足以下要求:
(1)節點是紅色或者是黑色的
(2)根節點是黑色的
(3)每個葉子節點都是黑色的(葉子是NIL節點)
(4)每個紅色節點必須有兩個黑色節點(從葉子到根節點的所有簡單路徑上不可能有兩個連續的紅色節點)
(5)從任一節點到其每個葉子的所有簡單路徑都飽和相同數目的節點
注:
NIL節點就是空節點,二叉樹中庸NIL節點代替NULL
簡單路徑:指頂點序列中頂點不重複出現的路徑
2.5二叉堆
滿足:
- 完全二叉樹
- 父節點值>=子節點值:最大堆/大跟堆
父節點值<=子節點值:最小堆/小根堆
用途
- 堆排序
- Top K問題
三、B-Tree/B-樹/B樹
B-tree樹即B樹,B即Balanced,即平衡樹,是爲了提高查詢效率而設計的一種多路平衡搜索樹。
詳細講解參考
https://www.cnblogs.com/sunsky303/p/11497448.html