版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
全國高等教育自學(xué)考試指定教材
計算機(jī)及應(yīng)用專業(yè)(本科段)數(shù)據(jù)結(jié)構(gòu)與算法第五章樹與二叉樹學(xué)習(xí)目標(biāo)理解樹及二叉樹的基本概念,掌握二叉樹的基本性質(zhì)掌握樹及二叉樹的存儲方式能夠?qū)崿F(xiàn)樹及二叉樹的基本操作及遍歷算法掌握堆的概念及基本操作的實現(xiàn)。理解優(yōu)先隊列的概念理解遞歸的概念,能夠?qū)崿F(xiàn)遞歸程序掌握樹、森林與二叉樹之間的相互轉(zhuǎn)換掌握哈夫曼樹及哈夫曼編碼的概念,能夠構(gòu)造哈夫曼樹并設(shè)計哈夫曼編碼本章主要內(nèi)容樹的基本概念12二叉樹的操作3二叉樹樹和森林5哈夫曼樹及哈夫曼編碼6堆及優(yōu)先隊列4第一節(jié)樹的基本概念樹是一種層次結(jié)構(gòu),是一種非線性結(jié)構(gòu)日常生活中,經(jīng)常會遇到具有層次關(guān)系的示例家族中部分成員的輩份關(guān)系樹的定義定義5-1一棵樹(tree)T是由一個或一個以上的結(jié)點組成的有限集,其中有一個特定的結(jié)點R稱為樹T的根結(jié)點。在集合中除根結(jié)點R外,其余的結(jié)點可劃分為k(k≥0)個不相交的子集T1,T2,…,Tk,其中每個子集都是樹,并且其相應(yīng)的根結(jié)點R1,R2,…,Rk是R的孩子結(jié)點,R稱為Ri(1≤i≤k)的雙親結(jié)點,Ri(1≤i≤k)互稱為兄弟結(jié)點。子集Ti(1≤i≤k)稱為根R的子樹(subtree)樹的結(jié)點集合至少包含一個結(jié)點只含有一個結(jié)點的樹是只有根結(jié)點的樹,也就是單結(jié)點樹對于多結(jié)點的樹,必須有一個結(jié)點是根結(jié)點之間通過邊來連接,邊也稱為分支。含n個結(jié)點的樹有且僅有n-1條邊,這是樹的重要特性之一根結(jié)點的各子樹之間不會有重疊樹是一種層次結(jié)構(gòu),也是遞歸形式的含有A,B,C,D,E,F,G,H,I,J共10個結(jié)點的樹TA為根結(jié)點,{B,E,F},{C,G}和{D,H,I,J}構(gòu)成根結(jié)點A的三棵子樹,B,C,D分別是這三棵子樹的根樹中每個結(jié)點擁有的子樹的個數(shù)稱為結(jié)點的度結(jié)點的度即為其子結(jié)點的個數(shù)樹中結(jié)點的度的最大值稱為樹的度度為0的結(jié)點稱為葉結(jié)點,或終端結(jié)點度不為0的結(jié)點稱為分支結(jié)點如果樹中每個結(jié)點的孩子結(jié)點之間規(guī)定了次序,則樹稱為有序樹具有同一雙親結(jié)點的結(jié)點是兄弟結(jié)點從任一結(jié)點到根結(jié)點之間所經(jīng)過的所有結(jié)點稱為該結(jié)點的祖先結(jié)點以任一結(jié)點為根的子樹中的所有結(jié)點稱為該結(jié)點的后代將線性結(jié)構(gòu)中的前驅(qū)和后繼概念引申至樹中,將某結(jié)點的雙親結(jié)點看作是它的前驅(qū),它的孩子結(jié)點看作是它的后繼除根結(jié)點外,每個結(jié)點均只有一個前驅(qū)結(jié)點根的前驅(qū)結(jié)點個數(shù)為0,除葉結(jié)點外,每個結(jié)點都有若干個后繼結(jié)點葉結(jié)點的后繼結(jié)點個數(shù)為0樹中每個元素的前驅(qū)的個數(shù)不會多于1個,后繼的個數(shù)可以是任意個樹是一種層次結(jié)構(gòu),設(shè)根為0層,根的孩子結(jié)點為1層,依此類推一般地,若某個結(jié)點位于i(i≥0)層,則它的孩子結(jié)點位于i+1層樹中結(jié)點的最大層數(shù)定義為樹的深度最大層數(shù)加1為樹的高度樹中從某一結(jié)點出發(fā),到達(dá)另一個結(jié)點之間所經(jīng)過的邊組成一條路徑路徑中所含的邊數(shù)為路徑長度雖然樹的路徑定義中并沒有限制路徑的方向,但路徑通常是沿一個方向延伸的,即從某一結(jié)點向根的方向延伸,或是從某一結(jié)點向葉結(jié)點方向延伸通常,以組成路徑的結(jié)點序列來表示該條路徑m(m≥0)棵互不相交的樹構(gòu)成森林對樹中每個結(jié)點來說,其子樹的集合即為森林第二節(jié)二叉樹定義5-2二叉樹(binarytree)是結(jié)點的一個有限集合,這個集合或者為空,或者是由一個根結(jié)點以及兩棵互不相交的、分別稱為這個根的左子樹和右子樹的二叉樹組成。左子樹和右子樹的根分別稱為此二叉樹根結(jié)點的左孩子結(jié)點和右孩子結(jié)點二叉樹的左子樹和右子樹都可以存在或者為空,不同的存在狀態(tài)可以組合出5種基本形態(tài)一棵高度為h的二叉樹若有2h-1個結(jié)點,則二叉樹稱為滿二叉樹從形式上來看,滿二叉樹中除葉結(jié)點外,每個結(jié)點都有兩個孩子結(jié)點,即除最后一層外,每一層的結(jié)點都是“滿”的滿二叉樹中的n個結(jié)點進(jìn)行連續(xù)編號,從編號為0的結(jié)點開始,由連續(xù)編號的任意多個結(jié)點組成的二叉樹稱為完全二叉樹特殊二叉樹滿二叉樹和完全二叉樹完全二叉樹的特性
二叉樹的性質(zhì)性質(zhì)1在二叉樹的i層上最多有2i個結(jié)點(i≥0)證明:使用數(shù)學(xué)歸納法證明
歸納基礎(chǔ):
對于非空的二叉樹T,根在0層,本層只有20=1個結(jié)點,結(jié)論成立
歸納假設(shè):
設(shè)二叉樹T中i-1層最多有2i-1個結(jié)點,考慮i層,由于i層的結(jié)點均為i-1層結(jié)點的孩子結(jié)點,而二叉樹中每個結(jié)點最多有兩個孩子結(jié)點,故i層最多有2
2i-1=2i個結(jié)點
根據(jù)歸納法原理,性質(zhì)1得證
性質(zhì)3對任何非空二叉樹T,設(shè)n0是葉結(jié)點的個數(shù),n2是度為2的結(jié)點的個數(shù),則有n0=n2+1證明:設(shè)二叉樹T中度為1的結(jié)點個數(shù)為n1,則T中結(jié)點總數(shù)n為 n=n0+n1+n2 n-1=2
n2+1
n1+0
n0
將上兩式聯(lián)立求解,得到 n0=n2+1
例5-3一棵二叉樹共有20個結(jié)點,其中葉結(jié)點為5個,則度為l的結(jié)點個數(shù)是()。A.11B.9C.6D.4答案為A二叉樹的存儲——順序存儲結(jié)構(gòu)對于完全二叉樹,各層自上至下,同層間自左至右,將結(jié)點依次存入數(shù)組從前至后的各個元素中。按照前面使用過的編號方法,一般來講,編號為i的結(jié)點存放在數(shù)組中下標(biāo)為i的位置使用這樣的存儲規(guī)則可以很方便地找到二叉樹中的相關(guān)結(jié)點,即若知道二叉樹某一結(jié)點保存在數(shù)組中下標(biāo)i的位置,則可以很方便地求出它的雙親結(jié)點(若存在)和左、右孩子結(jié)點(若存在)在數(shù)組中的位置對于一般的二叉樹,順序存儲的思想是,針對二叉樹中的每個位置,不論這個位置有沒有結(jié)點,都在數(shù)組中預(yù)留保存空間。采用這種存儲方式保存完全二叉樹時,既不浪費空間,又便于有關(guān)操作的實現(xiàn)例5-4設(shè)高度為k(k≥1)的二叉樹T采用順序存儲結(jié)構(gòu)保存在數(shù)組B[2k-1]中,在沒有保存T中元素的數(shù)組位置中,保存一個區(qū)別于T中元素的特殊標(biāo)記。B中保存的特殊標(biāo)記個數(shù)最多為()。A.k-1B.2k-1C.2k-k-1D.2k-1答案為C鏈?zhǔn)酱鎯Y(jié)構(gòu)定義一個結(jié)點結(jié)構(gòu):它含有兩個指針域,一個指針用來指向該結(jié)點左孩子所在的結(jié)點,稱為左孩子指針,簡稱為左指針;另一個指針用來指向該結(jié)點右孩子所在的結(jié)點,稱為右孩子指針,簡稱為右指針。此外,還定義一個用來保存結(jié)點中數(shù)據(jù)的數(shù)據(jù)域二叉鏈表表示二叉樹結(jié)點類的定義及二叉樹的定義二叉鏈表中結(jié)點類的定義及二叉樹的定義typedefintELEMType;typedefstructBNode //二叉樹結(jié)點{ ELEMTypedata; //數(shù)據(jù)域 structBNode*left,*right;
//指向左孩子、右孩子的指針}BinTNode;typedefBinTNode*BTree; //二叉樹二叉鏈表中到底有多少空指針域呢設(shè)二叉樹中有n個結(jié)點,每個結(jié)點都含有兩個指針域,則二叉鏈表中共有2
n個指針域已知含n個結(jié)點的樹中僅含有n-1個分支,即只有n-1個指針域不為空,則其余的n+1個指針域均為空可以看出,二叉鏈表中有超過一半的指針域都是空的,這些都是結(jié)構(gòu)性開銷第三節(jié)二叉樹的操作二叉樹的生成按照二叉樹的順序存儲方式,將二叉樹各結(jié)點值保存在一維數(shù)組中,然后建立二叉鏈表如要建立如下的二叉鏈表輸入的數(shù)組是inta[]={0,1,2,3,4,NA,5,NA,NA,NA,NA,NA,NA,6};函數(shù)CreateBinaryTree遞歸處理二叉鏈表的生成調(diào)用它的主程序中先創(chuàng)建一個根結(jié)點,其中保存數(shù)組首元素的值,該結(jié)點作為參數(shù)傳遞給函數(shù)CreateBinaryTree。這個結(jié)點的位置是下標(biāo)0,將這個位置值也作為參數(shù)傳給函數(shù)CreateBinaryTree主程序中BTreeroot;root=(BTree)malloc(sizeof(BinTNode));root->data=a[0];root->left=NULL;root->right=NULL;調(diào)用函數(shù)CreateBinaryTree。參數(shù)0是起始位置CreateBinaryTree(0,n,a,root);生成二叉鏈表如果下標(biāo)i處的結(jié)點有左孩子,則其應(yīng)該保存在下標(biāo)2
i+1處如果有右孩子,則應(yīng)該保存在下標(biāo)2
i+2處故在函數(shù)內(nèi),判斷數(shù)組中位置2
i+1及位置2
i+2處是否保存了元素值如果確實有值,則分配空間創(chuàng)建結(jié)點且保存數(shù)組中相應(yīng)位置的元素值,并讓下標(biāo)i處結(jié)點的相應(yīng)指針指向新創(chuàng)建的結(jié)點然后再以2
i+1或2
i+2為參數(shù)值,遞歸調(diào)用函數(shù),去處理2
i+1或2
i+2位置處結(jié)點的左孩子和右孩子如果數(shù)組中數(shù)據(jù)的存儲是正確的,則能正確建立二叉鏈表。如果位置2
i+1或位置2
i+2處沒有保存元素值,則遞歸結(jié)束二叉樹的遍歷對非空的二叉樹的遍歷可以相應(yīng)地分解為三項“子任務(wù)”訪問根結(jié)點遍歷左子樹(即依相應(yīng)的規(guī)律訪問左子樹中的全部結(jié)點)遍歷右子樹(即依相應(yīng)的規(guī)律訪問右子樹中的全部結(jié)點)常規(guī)的3種遍歷算法分別是先序遍歷、中序遍歷和后序遍歷。這3種遍歷也分別稱為先根遍歷、中根遍歷和后根遍歷先序遍歷算法若二叉樹為空,則返回;否則依次執(zhí)行以下操作(1)訪問根結(jié)點(2)先序遍歷左子樹(3)先序遍歷右子樹中序遍歷算法若二叉樹為空,則返回;否則依次執(zhí)行以下操作(1)中序遍歷左子樹(2)訪問根結(jié)點(3)中序遍歷右子樹后序遍歷算法若二叉樹為空,則返回;否則依次執(zhí)行以下操作(1)后序遍歷左子樹(2)后序遍歷右子樹(3)訪問根結(jié)點先序遍歷過程中序遍歷過程后序遍歷過程例5-6寫出其先序、中序及后序遍歷序列先序遍歷序列為A,B,D,G,H,J,K,E中序遍歷序列為G,D,J,H,K,B,E,A后序遍歷序列為G,J,K,H,D,E,B,A先序遍歷算法先序遍歷算法中序遍歷算法中序遍歷算法后序遍歷算法后序遍歷算法給出二叉樹的先序遍歷序列和中序遍歷序列,能唯一確定該二叉樹給出二叉樹的后序遍歷序列和中序遍歷序列,能唯一確定該二叉樹例5-7設(shè)二叉樹T的先序遍歷序列是A,B,D,G,H,J,K,E,中序遍歷序列是G,D,J,H,K,B,E,A,畫出二叉樹T由先序遍歷序列可知,T的根是A在中序遍歷序列中查找A的位置,位于A前面的是其左子樹的中序遍歷序列,位于A后面的是其右子樹的中序遍歷序列從而將原問題的求解(對整棵樹的還原)分解為兩個更小問題的求解(對兩棵子樹的還原)例5-8統(tǒng)計以二叉鏈表表示的二叉樹T中葉結(jié)點的個數(shù)T中葉結(jié)點的個數(shù)等于根左子樹中葉結(jié)點的個數(shù)加上根右子樹中葉結(jié)點的個數(shù)。所以如果遞歸調(diào)用已經(jīng)得到了兩棵子樹中葉結(jié)點的個數(shù),那么將結(jié)果相加即求解例5-9編寫程序,返回二叉樹T的高度仍是使用遞歸的思想去編寫程序。如果左子樹的高度和右子樹的高度都已經(jīng)知道,則二叉樹T的高度就可求得,樹的高度是兩棵子樹中較高者的高度再加1層序遍歷所謂按層遍歷,即是從根結(jié)點開始逐層向下遍歷,直到最后一層對于同一層的結(jié)點,由左到右遍歷各結(jié)點同一層中的結(jié)點相繼被訪問,同時,它們之間的相對次序也決定著它們孩子結(jié)點的相對次序。即同一層中的結(jié)點u和結(jié)點v,若先遍歷u再遍歷v,則u的孩子結(jié)點的遍歷也早于v的孩子結(jié)點的遍歷按層進(jìn)行遍歷先訪問最上面一層即0層中的元素,輸出1然后依次訪問1的子結(jié)點2和3再繼續(xù)訪問2的子結(jié)點和3的子結(jié)點依此類推,得到的層序遍歷結(jié)果是:1,2,3,4,5,6,7層序遍歷算法二叉樹層序遍歷的算法遍歷的非遞歸實現(xiàn)仍然將一棵二叉樹分為三部分:根、左子樹和右子樹。從根開始遍歷二叉樹時,根的左子樹和右子樹的遍歷不能同時進(jìn)行,只能先遍歷一棵子樹,同時保存二叉樹中尚不能遍歷部分的信息,留待一棵子樹處理完畢后再處理分析二叉樹的遍歷過程可知,使用棧來保存相關(guān)信息先序遍歷算法在進(jìn)入左子樹進(jìn)行處理之前,需要在棧中保存右子樹的相關(guān)信息,以便當(dāng)左子樹處理完畢,能夠根據(jù)保存的線索找到右子樹的根。所以,棧中保存右子樹的根即可程序中序遍歷算法中序遍歷時,先進(jìn)行左子樹的遍歷,然后遍歷根,再遍歷右子樹。所以棧中保存根的信息,遍歷完左子樹后,從棧中找到根,訪問根,同時也能容易地找到右子樹程序后序遍歷算法類似于中序遍歷過程,在進(jìn)入左子樹遍歷之前,需要先保存根的信息。當(dāng)左子樹遍歷結(jié)束,從棧中找到根,但此時因為右子樹尚未遍歷,所以根并不能從棧中彈出,仍需要保存在棧中,只有當(dāng)右子樹也遍歷結(jié)束后,才能訪問根棧中保存的結(jié)點需要入棧兩次出棧兩次。為了能有所區(qū)別,二叉樹結(jié)點入棧時,附帶一個標(biāo)記位flag。第一次出棧時,并不訪問結(jié)點。第二次出棧時才訪問它將二叉樹結(jié)點和標(biāo)記組合在一起,定義新的棧的類型,專用于非遞歸實現(xiàn)二叉樹的后序遍歷過程typedefstruct SNode //進(jìn)棧帶標(biāo)記結(jié)點{ BinTNodebtreeNode; //二叉樹結(jié)點
intflag; //標(biāo)記}StackTNode; typedefstruct{ //用于后序遍歷的棧 StackTNodeelement[maxSize]; inttop; //棧頂位置}SeqBTreeStackforPostT;程序二叉樹的應(yīng)用可以使用二叉樹來表示一個表達(dá)式,這樣的二叉樹稱為表達(dá)式樹2*y*(a+3*y)-b畫出表達(dá)式樹先根據(jù)運(yùn)算符的優(yōu)先級對表達(dá)式加括號去掉最外層括號。中間的運(yùn)算符為根,前后兩部分分別對應(yīng)于左子樹和右子樹對左子樹遞歸執(zhí)行步驟②對右子樹遞歸執(zhí)行步驟②當(dāng)遇到空串時,遞歸結(jié)束例5-12已知算術(shù)表達(dá)式的中綴形式為A+B*C-D/E,后綴形式為ABC*+DE/-,其前綴形式為()A.-A+B*C/DEB.-A+B*CD/EC.-+*ABC/DED.-+A*BC/DE答案:D
第四節(jié)堆及優(yōu)先隊列前一種關(guān)系表明,任何一個分支結(jié)點的值都不大于它子結(jié)點的值,所以樹根結(jié)點的值是全部結(jié)點中的最小值。這樣的堆稱為最小堆或小根堆后一種關(guān)系表明,任何一個分支結(jié)點的值都不小于它子結(jié)點的值,故樹根結(jié)點的值是全部結(jié)點中的最大值。這樣的堆稱為最大堆或大根堆樹根結(jié)點稱為堆頂堆的定義中還隱含了遞歸的含義,當(dāng)用完全二叉樹的形式表示堆時,樹中的任意一棵子樹都可以構(gòu)成堆,并且保持與原來同樣的性質(zhì)最大堆中任何結(jié)點的子樹仍是最大堆最小堆中任何結(jié)點的子樹仍是最小堆最小堆和最大堆堆的類型定義#defineHeapSize30 //堆的容量typedefintELEMType; //元素類型typedefstructHeap{ ELEMTypeheap[HeapSize]; //存放元素的數(shù)組 intn; //堆中當(dāng)前元素個數(shù)};堆的基本操作intcreatHeap(maxHeap*H,ELEMTypearr[],intn); //創(chuàng)建堆intinsertHeap(maxHeap*H,ELEMTypex); //在堆中插入元素xintdeleteHeap(maxHeap*H,ELEMType*x); //刪除堆頂元素intisHeapEmpty(maxHeap*H); //如果堆為空,則返回1,否則返回0intisHeapFull(maxHeap*H); //如果堆為滿,則返回1,否則返回0最大堆的類型定義#defineHeapSize30 //堆的容量typedefintELEMType; //元素類型typedefstructmaxHeap{ ELEMTypeheap[HeapSize]; //存放元素的數(shù)組 intn; //堆中當(dāng)前元素個數(shù)};判空、判滿創(chuàng)建最大堆向最大堆中插入新元素刪除堆頂元素例5-1370,13,65,24,56,48,92,86,將其建成最大堆例5-14在最大堆中插入新元素40例5-15刪除最大堆的堆頂優(yōu)先隊列一些應(yīng)用中,各元素本身還被賦予一個優(yōu)先值,可以用一個非負(fù)整數(shù)表示優(yōu)先值。優(yōu)先值也稱為優(yōu)先權(quán)。具有優(yōu)先值的各元素保存在一個結(jié)構(gòu)中,這個結(jié)構(gòu)稱為優(yōu)先隊列。輸出時,選擇最優(yōu)先的元素輸出?!白顑?yōu)先”取決于優(yōu)先值的定義,可以是優(yōu)先值最小,也可以是優(yōu)先值最大。第五節(jié)樹和森林樹的存儲結(jié)構(gòu)父結(jié)點表示法孩子結(jié)點表示法孩子-兄弟表示法父結(jié)點表示法樹中每個結(jié)點至少含兩個域,一個域用來保存結(jié)點本身的值,另一個域用來保存結(jié)點之父結(jié)點的相關(guān)信息孩子結(jié)點表示法父結(jié)點-孩子結(jié)點表示法孩子-兄弟表示法為樹中的每個結(jié)點定義一個存儲結(jié)點,其中有左、右兩個指針域,左指針域指向這個結(jié)點的第一個孩子結(jié)點,右指針域指向這個結(jié)點的下一個兄弟結(jié)點樹、森林與二叉樹的轉(zhuǎn)換樹和二叉樹都可以用二叉鏈表作為存儲結(jié)構(gòu)同一個二叉鏈表,若按樹的存儲含義來解釋,可以還原為樹。若按二叉樹的存儲含義來解釋,可以還原為二叉樹正是因為這一點,可以在樹與二叉樹之間建立一種對應(yīng)關(guān)系轉(zhuǎn)換規(guī)則規(guī)則1:將森林轉(zhuǎn)換成二叉樹設(shè)F={T1,T2,…,Tm}是森林,則可按如下規(guī)則將森林F轉(zhuǎn)換為一棵二叉樹B=(root,LB,RB)(1)若F為空(m=0),則B為空樹(2)若F非空(m>0),則森林中T1的根作為二叉樹B的根root;T1中各子樹組成的森林F1={T11,T12,…,T1s}轉(zhuǎn)換成的二叉樹作為B的左子樹BL;森林F’={T2,T3,…,Tm}轉(zhuǎn)換成的二叉樹作為B的右子樹BR森林轉(zhuǎn)換為二叉樹轉(zhuǎn)換規(guī)則規(guī)則2:將二叉樹還原為森林設(shè)B=(root,BL,BR)是一棵二叉樹,則可按如下規(guī)則轉(zhuǎn)換成森林F={T1,T2,…,Tm}(1)若B為空,則F為空(2)若B非空,則B的根root作為F中第一棵樹T1的根;B的左子樹BL還原得到的森林作為T1的各子樹;B的右子樹BR還原得到的森林作為F中的T2,T3,…,Tm樹和森林的遍歷樹的兩種遍歷策略先序(根)遍歷先訪問樹的根結(jié)點,再依次先序遍歷根結(jié)點的各棵子樹后序(根)遍歷若樹的根結(jié)點有子樹,則首先后序遍歷各棵子樹,然后再訪問根結(jié)點;否則(根結(jié)點無子樹),只訪問根結(jié)點森林的兩種遍歷策略先序遍歷森林森林的先序遍歷過程,是按照樹的排列次序,先序遍歷各棵樹后序遍歷森林森林的后序遍歷過程,是按照樹的排列次序,后序遍歷各棵樹可以看出,森林的遍歷序列中,各棵樹中的結(jié)點不會混雜在一起森林與對應(yīng)的二叉樹的遍歷序列的關(guān)系二叉樹的先序遍歷序列和中序遍歷序列,與森林的先序遍歷序列和后序遍歷序列分別相同第六節(jié)哈夫曼樹及哈夫曼編碼編碼ASCII編碼、Unicode碼、電報碼定長編碼算法簡單,效率高在編碼長度確定之后,譯文的長度完成取決于原文的長度變長編碼變長編碼前綴特性:一個編碼方案中,任何一個字符的編碼都不是該方案中任何其他字符編碼的前綴,這樣的編碼稱為具有前綴特性正是因為編碼方案具有前綴特性,才能夠保證譯碼過程的正確性和唯一性??梢允褂枚鏄鋪肀硎疽粋€編碼方案在二叉樹的分支上標(biāo)注0或1,從根到某結(jié)點的路徑上,各分支標(biāo)注的0或1組成一個編碼哈夫曼樹二叉樹中,葉結(jié)點的帶權(quán)路徑長度定義為葉結(jié)點的權(quán)值乘上其到根結(jié)點的路徑長度二叉樹的帶權(quán)路徑長度,就是樹中所有葉結(jié)點的帶權(quán)路徑長度之和二叉樹的外部帶權(quán)路徑長度記為WPL其中n為葉結(jié)點個數(shù),wk為第k個葉結(jié)點的權(quán)值,lk為第k個葉結(jié)點的路徑長度各字符出現(xiàn)的頻度分別是6、12、25、30,構(gòu)造4棵二叉樹,分別計算其WPL值4棵二叉樹的帶權(quán)路徑長度WPL分別為134、195、139和146我們的任務(wù)是構(gòu)造具有最小WPL且滿足前綴特性的編碼樹設(shè)有n個權(quán)值{w1,w2,…,wn},構(gòu)造具有n個葉結(jié)點的二叉樹,每個葉結(jié)點帶有一個權(quán)值wi。在所有這樣的二叉樹中,帶權(quán)路
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 訴訟代理與庭審辯護(hù)工作總結(jié)
- 幼兒捉迷藏課程設(shè)計
- 英雄之旅課程設(shè)計理念
- 酒店行業(yè)銷售工作總結(jié)
- IT行業(yè)員工薪酬福利制度優(yōu)化
- 2025年高考?xì)v史一輪復(fù)習(xí)之世界多極化
- 如何將愿景轉(zhuǎn)化為年度工作計劃
- 2023-2024學(xué)年福建省福州市福清市高一(下)期中語文試卷
- 漢字偏旁部首名稱大全表
- 文化行業(yè)市場拓展總結(jié)
- 特種設(shè)備“日管控、周排查、月調(diào)度”表格
- 重點關(guān)愛學(xué)生幫扶活動記錄表
- 2021年10月自考00850廣告設(shè)計基礎(chǔ)試題及答案含解析
- 結(jié)構(gòu)化面試表格
- 地?zé)崮苜Y源的潛力及在能源領(lǐng)域中的應(yīng)用前景
- 2023版:美國眼科學(xué)會青光眼治療指南(全文)
- 家長會課件:小學(xué)寒假家長會課件
- 變剛度單孔手術(shù)機(jī)器人系統(tǒng)設(shè)計方法及主從控制策略
- 兒童室外游戲機(jī)創(chuàng)業(yè)計劃書
- 2024年浙江寧波永耀供電服務(wù)有限公司招聘筆試參考題庫含答案解析
- 溫州食堂承包策劃方案
評論
0/150
提交評論