線性表是一對一的資料結構。
樹是一對多的資料結構。
樹的定義是: 有n
(n≥0
) 個結點,樹的定義中允許結點個數為0的情形,結點之間有一定的關係,什麼關係呢,
1. 當n=
0 時,我們稱這個樹為空樹;
2. 當
n>
0 時,有乙個特定的結點被稱之為根節點(root),然後其餘結點都連在根結點的下面並進行延伸,與根節點直接相連的結點又構成了幾棵子樹,這幾個節點也就是這幾棵子樹的根結點。
從中我們可以看出遞迴的意味,也就是說樹是由根結點和若干子樹構成,而每棵子樹同同時也是一棵樹。
術語解釋
結點每個元素就是乙個結點
結點的度
每個結點的子結點的個數,也等於結點的子樹的數目
樹的度各個結點的度的最大值
兄弟結點
具有相同父結點的節點互稱為兄弟結點
孩子結點/子結點
乙個結點含有的子樹的根結點稱為該結點的子結點
葉子結點/終端結點
度為0的結點 ,沒有子結點
分支結點/非葉子結點/非終端結點
度不為0的結點,有子結點
結點的層次
根結點為第一層,根結點的子結點為第2層,以此類推
樹的深度/高度
結點的最大層次
非空樹的結點總數
n = 所有結點的度之和 +1
每個結點的子結點的個數稱之為結點的度,除了根結點以外,每個結點都是別的結點的子結點。度為m
的非空樹的第i層最多有mi
−1個結點
每個結點最多有m個子結點,第一層為根結點,只有乙個結點,第二層最多有m個結點,在第二層最多的情況下,第三層最多有m2
個結點..
...
深度為k
的m叉樹最多有mk
−1m−
1 個結點
由性質2,
m 叉樹第
i層最多有mi
−1個結點,深度為
k 的話,從第
1層加到第
k 層,1+
m+m2
+...
+mk−
1=mk
−1m−
1具有n 個結點的
m叉樹的最小深度為lo
gm(n
(m−1
)+1)
向上取整。
要達到深度最小的要求,就要每層的結點個數盡可能的多,有
x 層的話,總結點最多有mx
−1m−
1個,有x−
1 的話,總結點最多有mx
−1−1
m−1 ,如果mx
−1m−
1>
n>mx
−1−1
m−1 的話,則樹的深度為
x ,此時lo
gm(n
(m−1
)+1)
<
xgm(n
(m−1
)+1)
+1,x
是個整數。
旭說資料結構之佇列
佇列又是一種特殊的線性表。特殊之處在於 想要移除線性表中的元素,必須從首元素開始移除 想要往線性表中插入元素,必須在尾部進行插入 與棧遵循的先入後出原則不同,它遵循的是先入先出的原則。拿到乙個佇列,我們可以對它進行入隊 隊尾插入 和出隊 隊首刪除 操作。假如我想要使用佇列,我肯定要先拿到乙個佇列。如...
旭說資料結構之棧的小題目
1.定義棧的資料結構,要求新增乙個min 函式,能夠得到棧的最小元素。要求函式min push 及pop 函式的時間複雜度都是o 1 思考1 如果說我們給棧這個類新增乙個成員變數min,用來記錄棧中的最小值。1.假設第一次push進入元素1時,設定min 1 2.再次想讓2進棧時,先把2和min進行...
旭說資料結構之鍊錶補充(雙向鍊錶)
上文已經介紹了鍊錶中的單鏈表,這裡我們再敘述一下雙向鍊錶 1.雙向鍊錶 對比單鏈表,雙向鍊錶能夠直接找到節點的前驅,也就能從任意乙個節點到達鍊錶的頭結點和尾節點。如下圖所示 下面我們還是從使用的角度出發來定義雙向鍊錶的介面。我想使用乙個雙向鍊錶,那我就new乙個來用。然後我就往裡插入元素。之後我又想...