樹
樹的表示方式有
樹形圖表示法:邏輯結構描述直觀
巢狀集合表示法(文氏圖表示法)
凹入表示法
廣義表表示法
二叉樹
二叉樹是另一種重要的樹形結構,是度為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 樹 森林 二叉樹的轉換 樹轉換為二叉樹的規則 每個節點左指標指向它的第乙個孩子,右指標指向它在樹種的相鄰右兄弟。根節點沒有兄弟,所以對應二叉樹沒有右子樹。樹轉換為二叉樹的方法 ...