資料結構 樹和二叉樹(二)

2021-07-31 06:59:21 字數 1987 閱讀 3172

二叉樹:

1:術語

其實樹中有很多術語的,這個是我們學習樹形結構必須掌握的。

<1>  父節點,子節點,兄弟節點

這個就比較簡單了,b和c的父節點就是a,反過來說就是b和c是a的子節點。b和c就是兄弟節點。

<2>  結點的度

其實」度「就是」分支數「,比如a的分支數有兩個「b和c",那麼a的度為2。

<3> 樹的度

看似比較莫名其妙吧,他和」結點的度「的區別就是,樹的度講究大局觀,乃樹中最大的結點度,其實也就是2。

<4> 葉結點,分支結點

葉結點就是既沒有左孩子也沒有右孩子結點,也就是結點度為0。分支節點也就是if的else的條件咯。

<5> 結點的層數

這個很簡單,也就是樹有幾層。

<6> 有序樹,無序樹

有序樹我們先前也用過,比如「堆」和「二叉排序樹」,說明這種樹是按照一定的規則進行排序的,else條件就是無序樹。

<7>  森林

現實中,很多的樹形成了森林,那在資料結構中,我們把上圖的「a」節點砍掉,那麼b,c子樹合一起就是森林咯。

2: 樹的表示

樹這個結構的表示其實有很多種,常用的也就是「括號」表示法。

比如上面的樹就可以表示為:(a(b(d),(e)),(c(f),(g)))

二: 二叉樹

在我們專案開發中,很多地方都會用到樹,但是多叉樹的處理還是比較糾結的,所以俺們本著「大事化小,小事化了「的原則

把」多叉樹「轉化為」二叉樹「,那麼問題就簡化了很多。

1: 」二叉樹「和」樹「有什麼差異呢?

第一點:  樹的度沒有限制,而「二叉樹」最多只能有兩個,不然也就不叫二叉樹了,哈哈。

第二點:樹中的子樹沒有左右劃分,很簡單啊,找不到參照點,二叉樹就有參照物咯。

2: 二叉樹的型別

二叉樹中有兩種比較完美的型別,「完全二叉樹」和「滿二叉樹」。

<1>  滿二叉樹    

除葉子節點外,所有節點的度都為2,文章開頭處的樹就是這裡的「滿二叉樹」。

<2>  完全二叉樹

必須要滿足兩個條件就即可:  乾掉最後一層,二叉樹變為「滿二叉樹」。

最後一層的葉節點必須是「從左到右」依次排開。

我們乾掉文章開頭處的節點「f和」g",此時還是「完全二叉樹」,但已經不是「滿二叉樹」了,***。

3: 二叉樹的性質

二叉樹中有5點性質非常重要,也是俺們必須要記住的。

<1>  二叉樹中,第i層的節點最多有2(i-1)個。

<2>  深度為k的二叉樹最多有2k-1個節點。

<3>  二叉樹中,葉子節點樹為n1個,度為2的節點有n2個,那麼n1=n2+1。

<4>  具有n個結點的二叉樹深度為(log2 n)+1層。

<5>  n個結點的完全二叉樹如何用順序儲存,對於其中的乙個結點i,存在以下關係,

2*i是結點i的父結點。

i/2是結點i的左孩子。

(i/2)+1是結點i的右孩子。

4: 二叉樹的順序儲存

同樣的儲存方式也有兩種,「順序儲存」和「鏈式儲存」。

<1> 順序儲存

說實話,樹的儲存用順序結構比較少,因為從性質定理中我們都可以看出只限定為「完全二叉樹」,那麼如果二叉樹不是

「完全二叉樹」,那我們就麻煩了,必須將其轉化為「完全二叉樹」,將空的節點可以用「#」代替,圖中也可看出,為了維護

性質定理5的要求,我們犧牲了兩個」資源「的空間。

<2> 鏈式儲存

上面也說了,順序儲存會造成資源的浪費,所以嘛,我們開發中用的比較多的還是「鏈式儲存」,同樣「鏈式儲存」

也非常的形象,非常的合理。

乙個結點存放著乙個「左指標」和乙個「右指標」,這就是二叉鍊錶。

如何方便的查詢到該結點的父結點,可以採用三叉鍊錶。

5: 常用操作

一般也就是「新增結點「,「查詢節點」,「計算深度」,「遍歷結點」,「清空結點

資料結構 樹和二叉樹 二叉線索樹

遍歷二叉樹就是以一定的規則將二叉樹中的結點排列成乙個線性序列,從而得到二叉樹結點的各種遍歷序列。其實質就是對乙個非線性結構進行線性化操作,使在這個訪問序列中每乙個結點 除了第乙個和最後乙個 都有乙個直接前驅和直接後繼。在二叉樹的鏈式儲存中,只能體現出父子關係,不能直接得到結點在遍歷中的前驅和後繼。前...

資料結構 樹和二叉樹

第一節 二叉樹的定義與基本操作 定義 我們把滿足以下兩個條件的樹型結構叫做二叉樹 binary tree 1 每個結點的度都不大於2 2 每個結點的孩子結點次序不能任意顛倒。由定義得出 二叉樹的每個結點只能含有0 1或2個孩子,且有左右之分。1 二叉樹的五種基本形態 2 二叉樹性質 性質1 二叉樹第...

資料結構 樹和二叉樹

定義 二叉樹是n n 0 個節點的有限集合,該集合或者為空集 稱為空二叉樹 或者由乙個根節點和兩棵互不相交的 分別稱為根節點的左子樹和右子樹的二叉樹組成。特點 每個節點最多有兩棵子樹 二叉樹是有序的,其次序不能任意顛倒 斜樹 1.所有節點都只有左子樹的二叉樹稱為左斜樹 2.所有節點都只有右子樹的二叉...