旭說資料結構之樹的簡介

2021-07-07 05:37:14 字數 1615 閱讀 8120

線性表是一對一的資料結構。

樹是一對多的資料結構。

樹的定義是: 有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乙個來用。然後我就往裡插入元素。之後我又想...