1. 程式人生 > >數據結構(七)二叉樹

數據結構(七)二叉樹

廣度優先 -1 XML -o 滿二叉樹 nal 如果 數據 中序

定義

技術分享

特點

技術分享

特殊的二叉樹

斜樹

顧名思義,其中的結點都只有一個,又分為左斜樹和右斜樹,這時候又有疑惑了,這種數據結構不是有線性表一樣嗎,沒錯,線性表是一種特殊的樹

滿二叉樹

技術分享

完全二叉樹

技術分享 這個定義有點繞,簡單來說就是所有的結點必須是有順序的,不能跳躍存在

二叉樹的性質

1.在二叉樹的第i層至多有2的(i-1)次方個結點,參考滿二叉樹 2.深度遊k的二叉樹至多有2的k次方-1個結點,參考滿二叉樹 3.任意二叉樹,終端結點為n0,度為2的結點為n2,度為1的結點為n1,則n0=n2+1 下面是推倒過程,設連接線為x,總結點數為n,則: n=n0+n1+n2 x=n1+2n2 x=n-1 求得n0=n2+1

存儲結構

二叉樹的順序結構

技術分享 這有點像廣度優先遍歷,但這裏關註的是存儲結構,不是遍歷方式,順序結構一般只用於滿二叉樹,普通二叉樹會有空間浪費,例如(^表示空) 技術分享

二叉鏈表

一個數據域,兩個指針域分別表示左孩子和右孩子 技術分享

二叉樹的遍歷

技術分享

前序遍歷

技術分享 技術分享

中序遍歷

技術分享

後序遍歷

技術分享 技術分享

層序遍歷

技術分享 這四種遍歷名稱都是針對每一個根結點而言, 前序:先遍歷根節點(深度優先遍歷) 中序:中間遍歷根節點 後序:最後遍歷根節點 層序:從根節點一層一層往下遍歷(廣度優先遍歷) 技術分享

線索二叉樹

定義

指向前驅和後繼的指針稱為線索,加上線索的二叉鏈表稱為線索二叉鏈表,相應的二叉樹就成為思安所二叉樹 技術分享
還需要證明前驅後後繼是否為孩子,所以加入了兩個標誌位,單個結點的結構如下 技術分享

場景

技術分享

赫夫曼樹及其應用

定義及原理

從樹中一個結點到另一個結點之間的分支構成兩個結點之間的路徑,路徑上的分支數目稱做路徑的長度 例如這兩個二叉樹 技術分享 二叉樹a中,從根結點到D結點的路徑為4,二叉樹b中,從根結點到D結點的路徑為2 二叉樹a的樹路徑長度為1+1+2+2+3+3+4+4=20 二叉樹b的樹路徑長度為1+1+2+2+2+2+2+3+3=16 如果考慮帶權路徑,路徑與權的乘積才是最終的路徑長度

定義

技術分享 也稱為最優二叉樹 如何構建赫夫曼樹 技術分享 技術分享

如何構建赫夫曼樹總結

技術分享

赫夫曼樹的應用-赫夫曼編碼

定義

技術分享 數據壓縮的原理基於此

數據結構(七)二叉樹