基础算法学习(二)_二叉树及应用赫夫曼编码
??? 這次學習的重點在于二叉樹的性質、鏈式存儲結構(也就是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? BinTree{
????????? int? data;
????????? struct? BinTree *lchild,*rchild;????
?? }BinTree,*BinTree;
?? 赫夫曼編碼
?? 赫夫曼樹,又稱最優樹,是一類帶權路徑長度最短的樹。定義有著帶權路徑長度最小的二叉樹稱作最優二叉樹(赫夫曼樹)。
?? 那么,如何構造赫夫曼樹呢?現敘述如下:
(1)根據給定的n個權值{w1,w2…wn}構造n棵二叉樹的集合F={T1,T2…Tn},每課二叉樹Ti的根的權為Wi,左右子樹為空。
(2)將F={T1,T2…Tn}按權值由小到大穩定排序。
(3)由最小的兩個權值樹T1,T2組成樹T,根的權為T1,T2根的權之和,左右子樹分別為T1、T2 。
(4)在F中刪除T1、T2,同時將T按序插入F中。
(5)重復(3)、(4),直到F中只剩一棵樹。
轉載于:https://www.cnblogs.com/perhapstang/archive/2009/12/19/1627692.html
總結
以上是生活随笔為你收集整理的基础算法学习(二)_二叉树及应用赫夫曼编码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 看逐浪CMS技术小哥做SVG动画(附使用
- 下一篇: 业务设计原则