資料結構與演算法6 樹

2022-03-07 02:05:30 字數 2778 閱讀 2777

樹的表示方式有

樹形圖表示法:邏輯結構描述直觀

巢狀集合表示法(文氏圖表示法)

凹入表示法

廣義表表示法

二叉樹

二叉樹是另一種重要的樹形結構,是度為2的有序樹,它的特點是每個結點至多有兩棵子樹。

二叉樹的遞迴定義

二叉樹是n(n≥0)個結點的有限集。它或者是空集(n=0),或者同時滿足以下兩個條件:

(1) 有且僅有乙個根結點;

(2) 其餘的結點分成兩棵互不相交的左子樹和右子樹。

二叉樹的特點

如果二叉樹的根結點只有一棵子樹,必須明確區分它是左子樹還是右子樹,因為兩者將構成不同形態的二叉樹。

注意:二叉樹不是樹的特例。它們是兩種不同的資料結構。

二叉樹舉例

二叉樹的性質

性質1:在二叉樹的第i層上至多有2i-1

個結點。 (i≥1)

性質2:深度為 k 的二叉樹上至多含 2k-1 個結點(k≥1)

證明:

性質3:對任何一棵二叉樹,若它含有n0個葉子結點、n2個度為2的結點,則必存在關係式:n0= n2+1。

即葉子結點數=度2結點 + 1

性質4:具有n個結點的完全二叉樹的深度為[log2n] +1  下取整

證明:

性質5:

若對含 n 個結點的完全二叉樹從上到下且從左至右進行 1 至 n 的編號,則對完全二叉樹中任意乙個編號為 i 的結點:

(1) 若 i=1,則該結點是二叉樹的根,無雙親, 否則,編號為 i/2 的結點為其雙親結點;

(2) 若 2i>n,則該結點無左孩子,否則,編號為 2i 的結點為其左孩子結點;

(3) 若 2i+1>n,則該結點無右孩子結點, 否則,編號為2i+1 的結點為其右孩子結點。

兩類特殊的二叉樹:

滿二叉樹

指的是深度為k且含有2k - 1個結點的二叉樹。

特點:(1)每一層上結點數都達到最大

(2)度為1的結點n1=0,樹葉都在最下一層。

滿二叉樹結點層序編號方法:

從根結點起從上到下逐層(層內從左到右)對二叉樹的結點進行連續編號。

完全二叉樹

樹中所含的 n 個結點和滿二叉樹中編號為 1 至 n 的結點一一對應。

完全二叉樹的特點:

1、滿二叉樹是完全二叉樹,完全二叉樹不一定是滿二叉樹;

2、在完全二叉樹中,若某個結點沒有左孩子,則它一定沒有右孩子,即該結點必是葉結點。

二叉樹的儲存結構:

1.順序儲存結構

用一組位址連續的儲存單元,以層序順序存放二叉樹的資料元素,結點的相對位置蘊含著結點之間的關係。

如完全二叉樹

非完全二叉樹,儲存時必須將相應的位置空出來,使存放的結果符合完全二叉樹的形狀。

所以,二叉樹順序儲存結構僅適用於完全二叉樹。

若儲存非完全二叉樹時有可能對儲存空間造成極大的浪費:

在最壞的情況下,乙個深度為k且只有k個結點的右單支樹需要2k-1個結點儲存空間。

二叉樹的鏈式儲存結構

根據二叉樹的非線性結構的特點,常用鏈式儲存方式來表示二叉樹。

二叉樹的鏈式儲存結構有3種,它們是二叉鍊錶、三叉鍊錶和線索鍊錶。

二叉鍊錶儲存結構

二叉鍊錶的c 語言型別描述如下:

typedef char

telemtype;

typedef

struct

node bitnode, *bitree;

三叉鍊錶(帶雙親指標的二叉鍊錶)

資料結構與演算法 樹

後序遍歷 已知前序和中序求後序 設計 的原則 1 有且僅有乙個根節點 2 所有的子樹也滿足該要求 子樹之間不能有交集 單個節點也是一棵樹 空樹 啥資料都沒有,沒有任何節點 根節點 父節點,子節點,兄弟節點 如果兩個節點的父節點雖不相同,但是它們的父節點處在同一層次上,那麼這兩個節點是兄弟節點 葉子節...

演算法與資料結構 樹

搜尋 如上圖所示 圓圈代表結點,連線結點的線代表邊。樹由結點和連線結點的邊組成。2 有根結點的父子關係 如圖根結點為0,連線根結點0到結點4最後一條邊連線著結點1和4,則結點1稱為結點4的父節點,結點4 為結點1 的子節點。結點2,3為結點4的兄弟結點。3 根結點 沒有父節點的結點 唯一 外部結點 ...

資料結構與演算法(樹)

1 樹的定義 2 基本術語 3 樹的性質 1 二叉樹定義及特性 2 二叉樹的儲存結構 1 二叉樹遍歷 1 樹的儲存結構 2 樹 森林 二叉樹的轉換 樹轉換為二叉樹的規則 每個節點左指標指向它的第乙個孩子,右指標指向它在樹種的相鄰右兄弟。根節點沒有兄弟,所以對應二叉樹沒有右子樹。樹轉換為二叉樹的方法 ...