基礎演算法學習(二) 二叉樹及應用赫夫曼編碼

2022-07-16 03:15:16 字數 1092 閱讀 9457

這次學習的重點在於二叉樹的性質、鏈式儲存結構(也就是c語言的struct)和赫夫曼編碼,學習的教材是清華大學出版社出版的c語言版資料結構。

首先是二叉樹

二叉樹(binary tree)是另一種樹形結構,它的特點是每個結點至多只有二棵子樹,並且二叉樹的子樹有左右之分,其次序不能任意顛倒。 

二叉樹的性質

二叉樹作為一種重要的樹形結構,在實際生活中的應用雖然不大,但它的結構使我們需要重點研究的。下面寫一寫二叉樹的性質和一些我的理    解。

性質1   在二叉樹的第i層至多有2^(i-1)個結點。這裡,我們把根定義為第一層。

證明:用歸納法證明。

性質2   深度為k的二叉樹至多有2^k-1個結點。

證明:結合性質1,用等比數列求和公式。

性質3   對任何一顆二叉樹t,如果其終端結點數字n0,度為2的結點數為n2,則n0=n2+1 。

證明:設整個樹的結點數為n,則n=n0+n1+n2 。   (1)

而樹裡的每個結點(除開根節點)都是由一條分支引出,則n=n1+2n2+1 。  (2)

綜合(1)(2)得出 n0=n2+1 。

性質4  具有n個結點的完全二叉樹的深度為 └logan┘+1 。└ ┘表示取下整數。

二叉樹的鏈式儲存結構

typedef struct  bintreebintree,*bintree;

赫夫曼編碼

赫夫曼樹,又稱最優樹,是一類帶權路徑長度最短的樹。定義有著帶權路徑長度最小的二叉樹稱作最優二叉樹(赫夫曼樹)

那麼,如何構造赫夫曼樹呢?現敘述如下:

(1)根據給定的n個權值構造n棵二叉樹的集合f=,每課二叉樹ti的根的權為wi,左右子樹為空。

(2)將f=按權值由小到大穩定排序。

(3)由最小的兩個權值樹t1,t2組成樹t,根的權為t1,t2根的權之和,左右子樹分別為t1、t2 。

(4)在f中刪除t1、t2,同時將t按序插入f中。

(5)重複(3)、(4),直到f中只剩一棵樹。

二叉樹的應用 堆排序, 赫夫曼樹

赫夫曼樹 堆排序是利用堆這種資料結構而設計的排序演算法,堆排序是一種選擇排序,最壞 最好 平均時間複雜度均為o nlogn 堆是具有以下性質的完全二叉樹 每個節點的值都大於或等於其左右孩子節點的值,稱為大頂堆。不要求節點左右孩子的大小關係。每個節點的值都小於或等於其左右孩子節點的值,稱為小頂堆。以大...

演算法學習 二叉樹

概念 樹中的元素叫做節點 連線相鄰的節點之間的關係叫父子關係 節點a節點是b節點的父節點,b節點是a節點的子節點。c,d單個節點的父節點是同乙個節點,所以他們互稱為兄弟節點 把沒有父節點的節點叫做根節點 沒有子節點的節點叫做葉子節點或者葉節點 樹節點的高度 節點到葉子節點的最長路徑 邊數 節點的深度...

樹的學習 (二)二叉樹的儲存結構及訪問

1.二叉樹的順序儲存 用一組連續的儲存單元依次自上而下 自左而右儲存完全二叉樹的結點元素。完全二叉樹的邏輯關係的表示 利用了完全二叉樹的雙親結點和孩結點的編號規則。即雙親結點編號為i,其左孩子結點為 2i 右孩子結點為 2i 1 反之亦可。因此為了保證完全二叉樹的結點編號與記憶體陣列中的結點編號一致...