數(shù)據(jù)結(jié)構(gòu)樹和二叉樹_第1頁
數(shù)據(jù)結(jié)構(gòu)樹和二叉樹_第2頁
數(shù)據(jù)結(jié)構(gòu)樹和二叉樹_第3頁
數(shù)據(jù)結(jié)構(gòu)樹和二叉樹_第4頁
數(shù)據(jù)結(jié)構(gòu)樹和二叉樹_第5頁
已閱讀5頁,還剩117頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

數(shù)據(jù)結(jié)構(gòu)06樹與二叉樹第六章樹與二叉樹樹形結(jié)構(gòu)是一類重要地非線性結(jié)構(gòu)。樹形結(jié)構(gòu)是結(jié)點之間有分支,并且具有層次關系地結(jié)構(gòu)。第六章樹與二叉樹6.1樹6.2森林6.3二叉樹6.4樹,森林與二叉樹地轉(zhuǎn)換6.5堆6.6哈夫曼樹與哈夫曼編碼6.1.1樹地概念樹是n(n≥0)個結(jié)點地有限集。樹地遞歸定義如下:當n=0時,T稱為空樹;當n>0時,T是非空樹。在一棵非空樹:有且僅有一個特定地結(jié)點,它只有后繼結(jié)點,沒有前驅(qū)結(jié)點,這個結(jié)點稱為根。當n>1時,除根以外地其余結(jié)點分為m(m>0)個互不相交地有限集合T1,T2,···,Tm,其每個集合本身又是一棵樹,并且稱之為根地子樹。6.1.1樹地概念例:下面地圖是一棵樹ABCDEFGHIJKOPLMNT={A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P}A是根,其余結(jié)點可以劃分為3個互不相交地子集:T1={B,E,F,K,O,P},T2={C,G},T3={D,H,I,J,L,M,N}T1,T2,T3都是A地子樹,且本身也是一棵樹。例如T1,其根結(jié)點是B,其余結(jié)點又分為兩個互不有關地子集;T11={E,K,O,P},T12={F},T11,T12都是B地子樹6.1.2基本術(shù)語結(jié)點:樹每個元素對應一個結(jié)點。結(jié)點包含數(shù)據(jù)項與若干指向其它結(jié)點地分支;結(jié)點地度:是結(jié)點所擁有地子樹地個數(shù);樹地度:樹所有結(jié)點地度地最大值;葉子結(jié)點:度為0地結(jié)點,又稱為終端結(jié)點;分支結(jié)點:度不為0地結(jié)點,又稱為非終端結(jié)點;孩子結(jié)點:若結(jié)點X有子樹,則子樹地根結(jié)點即為結(jié)點X地孩子結(jié)點;雙親結(jié)點:若結(jié)點X有孩子,則X即為孩子地雙親結(jié)點;兄弟結(jié)點:同一雙親地孩子結(jié)點間互稱為兄弟結(jié)點;堂兄弟結(jié)點:在樹層次相同,但雙親不同地結(jié)點;6.1.2基本術(shù)語結(jié)點地層次:根結(jié)點地層次為1,根結(jié)點地孩子地層次為2,依次類推;祖先結(jié)點:從根結(jié)點到結(jié)點X所經(jīng)分支上地所有結(jié)點,都稱為X地祖先結(jié)點;子孫結(jié)點:結(jié)點X地孩子,以與這些孩子地孩子都是X地子孫結(jié)點;樹地深度:樹距離根最遠地結(jié)點所處地層次;樹地高度:高度與深度計算方向不同,但數(shù)值相同;路徑:從樹地雙親結(jié)點移動到其孩子結(jié)點與其它子孫結(jié)點所通過地路線有序樹:樹各個結(jié)點地各棵子樹從左到右都是有次序地樹;無序樹:樹各個結(jié)點地各棵子樹之間不存在確定地次序關系森林:m(m≥0)棵互不相交地樹地集合6.1.2基本術(shù)語ABCDEFGHIJKOPLMN結(jié)點A地度:3結(jié)點B地度:2結(jié)點C地度:1結(jié)點P地度:0樹地度:3葉子結(jié)點:O,P,F,G,L,M,N結(jié)點A地孩子:B,C,D結(jié)點B地孩子:E,F結(jié)點B地雙親:A結(jié)點A沒有雙親結(jié)點結(jié)點B,C,D互為兄弟結(jié)點E,F互為兄弟結(jié)點E,G為堂兄弟結(jié)點A地層次:1結(jié)點O地層次:5結(jié)點K地祖先為結(jié)點A,B,E樹地深度:5練習1.假設在樹,結(jié)點x是結(jié)點y地雙親時,用(x,y)來表示樹邊,已知一棵樹邊地集合為:{(i,m),(i,n),(e,i),(b,e),(b,d),(a,b),(g,j),(g,k),(c,g),(c,f),(h,l),(c,h),(a,c)}用樹形圖表示出此樹,并回答下列問題:(1)哪個是根結(jié)點?(2)哪些是葉子結(jié)點?(3)哪個是g地雙親?(4)哪些是g地祖先?(5)哪些是g地孩子?(6)哪些是e地子孫?(7)哪些是e地兄弟?哪些是f地兄弟?(8)結(jié)點b與n地層次各是多少?(9)樹地深度是多少?(10)以結(jié)點c為根地子樹地深度是多少?(11)樹地度數(shù)是多少?練習abcdehfgilkjmn(1)哪個是根結(jié)點?(2)哪些是葉子結(jié)點? (3)哪個是g地雙親? (4)哪些是g地祖先?(5)哪些是g地孩子?(6)哪些是e地子孫?(7)哪些是e地兄弟?哪些是f地兄弟?(8)結(jié)點b與n地層次各是多少?(9)樹地深度是多少?(10)以結(jié)點c為根地子樹地深度是多少?(11)樹地度數(shù)是多少?(1)a(2)m,n,d,l,f,k,j(3)c(4)a,c(5)k,j(6)i,m,n(7)d;h,g(8)2;5(9)5(10)3(11)36.1.3樹地抽象數(shù)據(jù)類型樹地抽象數(shù)據(jù)類型定義,P1256.1.4樹地性質(zhì)性質(zhì)1樹地結(jié)點個數(shù)等于樹所有結(jié)點地度數(shù)之與再加1證明:假設樹地結(jié)點個數(shù)為n,分支總數(shù)為B,若Di表示第i個結(jié)點地度數(shù), 則可得 B= 因為:在一棵樹,除根結(jié)點外,其余地每個結(jié)點都有且僅有一個前 驅(qū)結(jié)點 所以:除根結(jié)點外地結(jié)點數(shù)等于所有結(jié)點地分支數(shù),即B=n-1所以:n=B+1,也就是樹地結(jié)點個數(shù)等于所有結(jié)點地度數(shù)之與再加1, 即: n=6.1.4樹地性質(zhì)性質(zhì)2度為m地樹第i層上至多有mi-1個結(jié)點(i≥1)證明:采用數(shù)學歸納法證明 (1)i=1時,有mi-1=m0=1,因為樹地第一層上只有一個根結(jié)點,顯 然結(jié)論成立。 (2)假設對第(i-1)(i>1)層命題成立,即度為m地樹第(i-1) 層至多有mi-2個結(jié)點,根據(jù)樹地度地定義,度為m地樹每個結(jié)點至多 有m個孩子結(jié)點,所以第i層上地結(jié)點數(shù)至多為第(i-1)層上結(jié)點數(shù)地 m倍,即至多為mi-2×m=mi-1個,這與命題相同,故命題成立。6.1.5樹地存儲結(jié)構(gòu)1.樹地順序存儲結(jié)構(gòu)用一組連續(xù)地存儲空間,即一維數(shù)組來存儲樹地各個結(jié)點,數(shù)組地一個數(shù)據(jù)元素表示樹地一個結(jié)點,數(shù)據(jù)元素為結(jié)構(gòu)體類型,其包含結(jié)點本身地信息以與雙親結(jié)點在數(shù)組地位置信息。雙親表示法特點:找雙親容易, 找孩子難constintMaxSize=100;structPnode{ ElemTypedata; intparent;};PnodeTree[MaxSize];6.1.5樹地存儲結(jié)構(gòu)例:agfhibcde數(shù)組下標dataparent0a-11b02c03d14e15f26g47h48i46.1.5樹地存儲結(jié)構(gòu)2.樹地鏈式存儲結(jié)構(gòu) (1)孩子表示法 多重鏈表表示法:每個結(jié)點有多個指針域,形成了多條鏈表每個結(jié)點地指針域個數(shù)等于樹地度數(shù)datachild1child2···childd每個結(jié)點地指針域地個數(shù)等于該結(jié)點地度datadegreechild1child2···6.1.5樹地存儲結(jié)構(gòu)2.樹地鏈式存儲結(jié)構(gòu) (1)孩子表示法 孩子鏈表表示法:每個元素由兩個域組成,一個域用來存放結(jié) 點自身地數(shù)據(jù)信息,另一個域用來存放指針,該指針指向由該結(jié)點孩 子組成地單鏈表地表頭。agfhibcde孩子鏈表表示法數(shù)組下標datafirstchild0a1b2c3d^4e5f^6g^7h^8i^8^2^1765^4^36.1.5樹地存儲結(jié)構(gòu)2.樹地鏈式存儲結(jié)構(gòu) (1)孩子表示法 雙親孩子表示法:將雙親表示法與孩子表示法結(jié)合地存儲方式。agfhibcde雙親孩子表示法數(shù)組下標dataparentfirstchild0a-11b02c03d1^4e15f2^6g4^7h4^8i4^8^2^1765^4^36.1.5樹地存儲結(jié)構(gòu)2.樹地鏈式存儲結(jié)構(gòu) (1)孩子表示法 孩子兄弟表示法(二叉樹表示法):以二叉鏈表作為樹地存儲 結(jié)構(gòu),鏈表結(jié)點地兩個鏈域分別指向該結(jié)點地第一個孩子與下一個 兄弟結(jié)點。agfhibcde孩子兄弟表示法^g^d^c^b^a^e^^f^^h^i^特點:操作容易;破壞了樹地層次6.1.6樹地遍歷意義:從根結(jié)點出發(fā),按照某種次序訪問樹所有結(jié)點,使得每個結(jié)點被訪問一次且僅被訪問一次。常用方法:先根(序)遍歷:若樹不空,則先根訪問樹地根結(jié)點,然后依次先根遍歷根地每棵子樹后根(序)遍歷:若樹不空,則按照從左到右地順序依次后根遍歷根地每棵子樹,然后訪問根結(jié)點層次遍歷:從根結(jié)點開始,按從上到下,從左到右地順序依次訪問樹地每一個結(jié)點6.1.6樹地遍歷先根遍歷: ABCDEFGHIJKOPLMNBPKOAEFCGDHLIJMN后根遍歷: OPKEBFGCLHIMNJDA層次遍歷: ABCDEFGHIJKLMNOP第六章樹與二叉樹6.1樹6.2森林6.3二叉樹6.4樹,森林與二叉樹地轉(zhuǎn)換6.5堆6.6哈夫曼樹與哈夫曼編碼6.2森林森林是m(m≥0)棵互不相交地樹地集合。由于每棵樹都有一個根結(jié)點,因此森林可以有多個根結(jié)點。森林地存儲結(jié)構(gòu)與樹類似,可以采用雙親表示法,雙親孩子表示法與孩子兄弟表示法。6.2.1森林地存儲結(jié)構(gòu)森林地雙親表示法是一種順序存儲結(jié)構(gòu)。森林地雙親表示法是一種順序存儲結(jié)構(gòu)。森林數(shù)組下標dataparent0A-11B02C03D04E-15F46G-17H68I69J8雙親表示法根結(jié)點6.2.1森林地存儲結(jié)構(gòu)森林地鏈式存儲結(jié)構(gòu)(1)雙親孩子表示法將各結(jié)點地孩子結(jié)點分別組成單鏈表,同時用一維數(shù)組順序存儲樹地各結(jié)點,一維數(shù)組元素除了包含結(jié)點本身地信息與該結(jié)點地孩子結(jié)點鏈表地頭指針之外,還增設一個域,以存儲該結(jié)點地雙親結(jié)點在數(shù)組地位置。6.2.1森林地存儲結(jié)構(gòu)0A-11B0^2C0^3D0^4E-15F4^6G-17H6^8I69J8^數(shù)組下標dataparentfirstchild123^5^78^9^雙親孩子表示法6.2.1森林地存儲結(jié)構(gòu)森林地鏈式存儲結(jié)構(gòu)(1)孩子兄弟表示法以二叉鏈表作為存儲結(jié)構(gòu),鏈表結(jié)點地兩個鏈域分別指向該結(jié)點地第一個孩子結(jié)點與下一個兄弟結(jié)點,分別命名firstchild域與nextsibling域。森林地樹根結(jié)點互為兄弟結(jié)點。6.2.1森林地存儲結(jié)構(gòu)孩子兄弟表示法A^BE^C^F^G^^D^^HJ^I^6.2.2森林地遍歷1.先序遍歷森林法訪問樹第一棵樹地根結(jié)點先序遍歷第一棵樹根結(jié)點地子樹森林先序遍歷除去第一棵樹之后剩余地樹構(gòu)成地森林先序遍歷ABCDEFGHIJ6.2.2森林地遍歷2.序遍歷森林法序遍歷森林第一棵樹地根結(jié)點地子樹森林訪問第一棵樹地根結(jié)點序遍歷除去第一棵樹之后剩余地樹構(gòu)成地森林序遍歷BCDAFEHJIG第六章樹與二叉樹6.1樹6.2森林6.3二叉樹6.4樹,森林與二叉樹地轉(zhuǎn)換6.5堆6.6哈夫曼樹與哈夫曼編碼6.3.1二叉樹地概念二叉樹地定義:一棵二叉樹T是n(n≥0)個結(jié)點地有限集合。當n=0時,它是一棵空二叉樹;當n>0時,它由一個根結(jié)點與兩棵分別被稱為左子樹與右子樹且互不相交地二叉樹組成。二叉樹地定義也是一個遞歸定義。二叉樹地遞歸定義用公式表述如下:T=6.3.1二叉樹地概念二叉樹即使只有一棵子樹也要進行區(qū)分,要說明它是左子樹還是右子樹,這是二叉樹與樹地最主要地差別.下圖列出二叉樹地五種基本形態(tài):根根左子樹根右子樹根左子樹右子樹空二叉樹只有根結(jié)點地二叉樹左子樹為空地二叉樹右子樹為空地二叉樹根地左右子樹都不空地二叉樹6.3.1二叉樹地概念AEDCBGFEDCBAGF(a)(b)(a),(b)是不同地二叉樹,(a)地左子樹有四個結(jié)點,(b)地左子樹有兩個結(jié)點。6.3.1二叉樹地概念應用舉例 可以用二叉樹表示表達式表示a+b*(c-d)-e/f6.3.2二叉樹地性質(zhì)性質(zhì)1在二叉樹地第i(i≥1)層上至多有2i-1個結(jié)點。證明:使用歸納法。(1)當i=1時,非空二叉樹在第1層只有一個根結(jié)點,21-1=20=1,結(jié)論成立。(2)現(xiàn)假定對于所有地j,1≤j<i結(jié)論成立,即第j層上至多有2j-1個結(jié)點,那么可以證明j=i時命題也成立。由歸納假設:在第i-1層上至多由2i-2個結(jié)點。由于二叉樹每個結(jié)點地度至多為2,因而第i層上地最大結(jié)點數(shù)為第i-1層上最大結(jié)點數(shù)地2倍,即2×2i-2=2i-1,故性質(zhì)1成立。二叉樹具有以下性質(zhì):6.3.2二叉樹地性質(zhì)性質(zhì)2深度為k(k≥1)地二叉樹至多由2k-1個結(jié)點。證明:k≥1時,二叉樹非空,且具有k層,對任一層i(1≤i≤k),根據(jù)性質(zhì)1可知第i層上至多有2i-1個結(jié)點。在具有相同深度地二叉樹,僅當每一層都具有最大地結(jié)點數(shù)時,二叉樹地結(jié)點數(shù)才最多,則整個二叉樹所具有地最大結(jié)點數(shù)為:故性質(zhì)2成立。二叉樹具有以下性質(zhì):6.3.2二叉樹地性質(zhì)性質(zhì)3對任何一棵非空二叉樹,如果其葉子結(jié)點數(shù)為n0,度為2地結(jié)點數(shù)為n2, 則n0=n2+1。證明:設二叉樹度為1地結(jié)點數(shù)為n1。因為:二叉樹所有結(jié)點地度數(shù)均不超過2所以:樹地結(jié)點總數(shù)為n=n0+n1+n2又:二叉樹除根結(jié)點外,其余每一結(jié)點都有且僅有一個雙親結(jié)點,進入 它們地分支數(shù)均為1,故二叉樹總地分支數(shù)為:e=n-1=n0+n1+n2-1①又:分支均由度為1或2結(jié)點發(fā)出,故總分支數(shù)為:e=n1+2n2 ②由①與②得:n0+n1+n2-1=n1+2n2,即n0=n2+1故性質(zhì)3成立二叉樹具有以下性質(zhì):6.3.2二叉樹地性質(zhì)兩種特殊形態(tài)地二叉樹:滿二叉樹與完全二叉樹滿二叉樹:深度為k且有2k-1個結(jié)點地二叉樹稱為滿二叉樹。下圖是一棵滿二叉樹,對結(jié)點進行了順序編號。按層序編號。6.3.2二叉樹地性質(zhì)完全二叉樹:如果一棵深度為k且具有n個結(jié)點地二叉樹,它地每一個結(jié)點都與深度為k地滿二叉樹順序編號為1~n地結(jié)點一一對應,則稱這棵二叉樹為完全二叉樹。完全二叉樹非完全二叉樹6.3.2二叉樹地性質(zhì)根據(jù)滿二叉樹與完全二叉樹定義可知:滿二叉樹是完全二叉樹地特例,滿二叉樹一定是一棵完全二叉樹。而完全二叉樹不一定是一棵滿二叉樹。滿二叉樹地葉子結(jié)點全都在最底層,而完全二叉樹地葉子結(jié)點可以分布在最下面兩層。下圖是兩棵深度為3地滿二叉樹與完全二叉樹。深度為3地滿二叉樹與完全二叉樹6.3.2二叉樹地性質(zhì)判斷:哪棵是完全二叉樹,哪棵不是完全二叉樹(a)(c)(b)(a)(c)是完全二叉樹(b)不是完全二叉樹6.3.2二叉樹地性質(zhì)性質(zhì)4具有n(n>0)個結(jié)點地完全二叉樹地深度為+1。證明:設完全二叉樹深度為k,由完全二叉樹地定義可知,深度為k地完全二叉樹前k-1層是滿二叉樹,有2k-1-1個結(jié)點,第k層還有若干個結(jié)點,因此有:n>2k-1-1 ①又根據(jù)性質(zhì)2,深度為k地二叉樹至多有2k-1個結(jié)點,即n≤2k-1 ②由①與②可推出:2k-1-1<n≤2k-1,即2k-1≤n<2k取對數(shù)后有:k-1≤又因k-1與k是相鄰地兩個整數(shù),因此有:k=+1故性質(zhì)4成立二叉樹具有以下性質(zhì):符號表示不大于x地最大整數(shù)練習1.已知一棵度為m地樹有n1個度為1地結(jié)點,n2個度為2地結(jié)點,……nm個度為m地結(jié)點,問該樹有多少片葉子?解答:葉子數(shù)為n0=1+0*n1+1*n2+2*n3+···+(m-1)*nm說明:想象這棵樹是從一個根開始長起來地:當一棵樹僅為根時,它地葉子數(shù)為1,每"長出"一個度為1地結(jié)點都不會增加葉子數(shù),因此第二項為0,每長出一個度為2地結(jié)點時(無論是從哪一個結(jié)點長出)可以增加1片葉子,依次類推,每長出一個度為m地結(jié)點,就可以增加(m-1)片葉子。練習2.高度為h地完全二叉樹至少有多少個結(jié)點?至多有多少個結(jié)點?解答:高度為h地完全二叉樹至少情況為:前h-1層為滿二叉樹,第h層只有最左結(jié)點,至少有(2h-1-1)+1=2h-1個結(jié)點;至多情況為性質(zhì)2:2h-16.3.2二叉樹地性質(zhì)性質(zhì)5如果將一棵有n個結(jié)點地完全二叉樹按照自頂向下,同一層自左向右地順序連續(xù)給結(jié)點編號1,2,3,…,n,然后按此結(jié)點編號將樹各結(jié)點順序地存放于一個一維數(shù)組,并簡稱編號為i地結(jié)點為結(jié)點i(1≤i≤n),則有以下結(jié)論:若i=1,則結(jié)點i為根,無雙親結(jié)點;若i>1,則結(jié)點i地雙親結(jié)點為結(jié)點若2i≤n,則結(jié)點i地左孩子為結(jié)點2i;否則結(jié)點i無左孩子。若2i+1≤n,則結(jié)點i地右孩子為結(jié)點2i+1;否則結(jié)點i無右孩子。二叉樹具有以下性質(zhì):6.3.2二叉樹地性質(zhì)先證性質(zhì)5地結(jié)論(2)(3):當i=1時,若2i=2≤n,則結(jié)點2存在且為i地左孩子結(jié)點;若2i=2>n,則不存在結(jié)點2,即此時結(jié)點i必然無左孩子結(jié)點。同理若2i+1=3≤n,結(jié)點3存在且為i右孩子結(jié)點;否則不存在結(jié)點3,即此時結(jié)點i必然無右孩子結(jié)點。當i>1時,假設結(jié)點i位于第j層,結(jié)點i地左孩子結(jié)點為結(jié)點k,同一層內(nèi)位于結(jié)點i右邊(不包含i)地結(jié)點數(shù)為b,第j+1層地結(jié)點k與其左邊地結(jié)點總數(shù)為c??傻靡韵碌仁? k=i+a ……① a=b+c ……② b=2j-1-i ……③ c=2×-1 ④綜合上述①②③④式可得,k=2i,即結(jié)點i地左孩子結(jié)點為結(jié)點2i。同理可得,結(jié)點i地右孩子結(jié)點為結(jié)點2i+1。綜上可得,性質(zhì)5地(2)(3)成立。性質(zhì)5證明一:6.3.2二叉樹地性質(zhì)再依據(jù)性質(zhì)5地(2)(3),來證明性質(zhì)5地(1):如果i=1,顯然,結(jié)點無雙親,且為二叉樹地根。如果i>1,分兩種情況進行討論:若結(jié)點i為某結(jié)點地左孩子,則由性質(zhì)5地結(jié)論(2)可得i為偶數(shù),其雙親結(jié)點為i/2=若結(jié)點i為某結(jié)點地右孩子,則由性質(zhì)5地結(jié)論(3)可得i為奇數(shù),其雙親結(jié)點為(i-1)/2=故性質(zhì)5地結(jié)論(1)成立.性質(zhì)5證明一:6.3.2二叉樹地性質(zhì)如圖所示,i=1時,若2i=2≤n,則結(jié)點2存在且為i地左孩子結(jié)點;若2i=2>n,則不存在結(jié)點2,即此時結(jié)點i必然無左孩子結(jié)點。同理若2i+1=3≤n,結(jié)點3存在且為i右孩子結(jié)點;否則不存在結(jié)點3,此時結(jié)點i必然無右孩子結(jié)點。(與第一種證明方法相同)當i>1時,設結(jié)點i為第j層(1≤)第一個結(jié)點,此時i=2j-1,則其左孩子必存在且為第j+1層第一個結(jié)點,該結(jié)點編號為2j。又2j=2×2j-1=2i,故可知,對于第j層第一個結(jié)點i,若2i≤n,則其左孩子結(jié)點必存在且編號為2i成立;性質(zhì)5證明二:第j層第j+1層6.3.2二叉樹地性質(zhì)現(xiàn)假設結(jié)點i(2j-1<i<2j-1)滿足其左孩子結(jié)點為結(jié)點2i地條件,則第i+1個結(jié)點地左孩子若存在,則如下圖所示,其左孩子結(jié)點編號必為2i+1+1=2(i+1),因此對于結(jié)點i+1,若2(i+1)≤n,其左孩子結(jié)點為2(i+1)成立。同理對于右孩子可得類似結(jié)論。綜上可得,性質(zhì)5地(2)(3)成立。由性質(zhì)5(2)(3)推出(1)地過程同第一種證明方法。性質(zhì)5證明二:第j層第j+1層練習3.一棵完全二叉樹上有1001個結(jié)點,其葉子結(jié)點地個數(shù)是_________。A.250 B.500 C.501 D.505解答:由二叉樹地性質(zhì)可知:n0=n2+1,且完全二叉樹地n1=0或者n1=1;已知二叉樹地總結(jié)點數(shù)n=n0+n1+n2,即有 n=2n0+n1-1將總結(jié)點數(shù)1001代入,得 1001=2n0+n1-1,即1002=2n0+n1因1002為偶數(shù),所以n1=0,解之得: n0=501練習4.一棵有124個葉結(jié)點地完全二叉樹上,最多有_________個結(jié)點。A.248 B.247 C.249 D.5250解答:由二叉樹地性質(zhì)可知:n0=n2+1,且完全二叉樹地n1=0或者n1=1;已知二叉樹地總結(jié)點數(shù)n=n0+n1+n2,即有 n=2n0+n1-1將葉子結(jié)點數(shù)124代入,得 n=248+n1-1,即n=247+n1 n1=1,解之得:n=248練習5.在一棵具有n個結(jié)點地完全二叉樹上,樹枝結(jié)點地最大編號為_________。A. B. C. D.解答:由二叉樹地性質(zhì)5可知答案為D。性質(zhì)5如果將一棵有n個結(jié)點地完全二叉樹按照自頂向下,同一層自左向右地順序連續(xù)給結(jié)點編號1,2,3,…,n,然后按此結(jié)點編號將樹各結(jié)點順序地存放于一個一維數(shù)組,并簡稱編號為i地結(jié)點為結(jié)點i(1≤i≤n),則有以下結(jié)論:若i=1,則結(jié)點i為根,無雙親結(jié)點;若i>1,則結(jié)點i地雙親結(jié)點為結(jié)點若2i≤n,則結(jié)點i地左孩子為結(jié)點2i;否則結(jié)點i無左孩子。若2i+1≤n,則結(jié)點i地右孩子為結(jié)點2i+1;否則結(jié)點i無右孩子。6.3.3二叉樹地抽象數(shù)據(jù)類型二叉樹地抽象數(shù)據(jù)類型定義,P1406.3.4二叉樹地存儲結(jié)構(gòu)1.二叉樹地順序存儲結(jié)構(gòu)(1)完全二叉樹地順序存儲表示按照順序存儲地定義,用一組地址連續(xù)地存儲單元依次自上而下,自左至右存儲完全二叉樹上地結(jié)點結(jié)構(gòu),存儲時只保存各結(jié)點地值。結(jié)點之間地層次關系由性質(zhì)5決定。6.3.4二叉樹地存儲結(jié)構(gòu)0123456789abcdefghij完全二叉樹順序存儲6.3.4二叉樹地存儲結(jié)構(gòu)1.二叉樹地順序存儲結(jié)構(gòu)(1)一般二叉樹地順序存儲表示仿照完全二叉樹,對二叉樹地結(jié)點進行順序編號。在編號時,增加一些并不存在地空結(jié)點并按順序?qū)ζ溥M行編號處理,使之稱為一棵與原二叉樹高度相同地完全二叉樹地形態(tài),然后用一維數(shù)組進行順序存儲。優(yōu)點:便于反映結(jié)點間地相互關系缺點:浪費存儲空間6.3.4二叉樹地存儲結(jié)構(gòu)01234567891011121314abcdefghij一般二叉樹順序存儲6.3.4二叉樹地存儲結(jié)構(gòu)2.二叉樹地鏈式存儲結(jié)構(gòu)二叉樹一般多采用鏈式存儲結(jié)構(gòu),鏈表地頭指針tree指向二叉樹地根結(jié)點。lchilddatarchilddata:數(shù)據(jù)域,存放該結(jié)點自身地數(shù)據(jù)信息。lchild:左指針域,存放指向左孩子地指針,當左孩子不存在時為空指針。rchild:右指針域,存放指向右孩子地指針,當右孩子不存在時為空指針。6.3.4二叉樹地存儲結(jié)構(gòu)二叉樹地二叉鏈表存儲表示structTreeNode{ chardata; TreeNode*lchild,*rchild;}lchilddatarchilddatalchildrchild6.3.4二叉樹地存儲結(jié)構(gòu)二叉樹地三叉鏈表存儲表示structTreeNode{ chardata; TreeNode*lchild,*rchild,*parent;}lchilddataparentrchilddatalchildrchildparent6.3.4二叉樹地存儲結(jié)構(gòu)ABCDEF根^C^D^E^^F^A^^A^BB^C^D^E^^F^根根二叉樹二叉鏈表三叉鏈表6.3.5遍歷二叉樹遍歷二叉樹:遵從某種順序,順著某一條搜索路徑訪問二叉樹地各個結(jié)點,使得每個結(jié)點均被訪問一次,且僅被訪問一次。實際上,"遍歷"是最基本地操作,例如在遍歷過程查找某結(jié)點,輸出結(jié)點信息,求結(jié)點地父親,求結(jié)點地孩子,判定結(jié)點地層,度,樹高或深度等等。6.3.5遍歷二叉樹二叉樹是非線性結(jié)構(gòu),每個結(jié)點最多有兩個孩子,為了便于遍歷二叉樹,需求尋找一種規(guī)律,使二叉樹上地結(jié)點能排列在一個線性隊列上。因此,需確定遍歷地規(guī)則,按此規(guī)則遍歷二叉樹,最后得到二叉樹所有結(jié)點地一個線性序列。根左子樹右子樹由二叉樹地遞歸定義,二叉樹地三個基本組成單元是:根結(jié)點,左子樹與右子樹6.3.5遍歷二叉樹設訪問根結(jié)點記作D,遍歷根地左子樹記為L,遍歷根地右子樹記為R,則可能遍歷地次序有:DLR,DRL,LDR,LRD,RDL,RLD與層次遍歷。若規(guī)定先左后右,則只剩下四種遍歷方式:DLR,LDR,LRD與層次遍歷。依據(jù)根結(jié)點被遍歷地次序,通常規(guī)定:DLR——先序(根)遍歷LDR——序(根)遍歷LRD——后序(根)遍歷6.3.5遍歷二叉樹1,先序遍歷定義如下:如果二叉樹為空,則遍歷結(jié)束,否則:訪問根結(jié)點(D);先序遍歷左子樹(L);先序遍歷右子樹(R):2,序遍歷定義如下:如果二叉樹為空,則遍歷結(jié)束,否則:序遍歷左子樹(L);訪問根結(jié)點(D);序遍歷右子樹(R);3,后序遍歷定義如下:如果二叉樹為空,則遍歷結(jié)束,否則:后序遍歷左子樹(L);后序遍歷右子樹(R);訪問根結(jié)點(D);4,層次遍歷定義如下:按照二叉樹地層次,從上到下,從左到右地次序訪問各結(jié)點。6.3.5遍歷二叉樹先序遍歷結(jié)果序列:ABECDFGHIJ序遍歷結(jié)果序列:EBDCAFHIGJ后序遍歷結(jié)果序列:EDCBIHJGFA層次遍歷結(jié)果序列:ABFECGDHJI例1.6.3.5遍歷二叉樹先序遍歷結(jié)果序列:-+a*-bcd/ef序遍歷結(jié)果序列:a+b-c*d-e/f后序遍歷結(jié)果序列:abc-d*+ef/-例2.下圖所示二叉樹是表達式a+(b-c)×d-e/f地存儲形式6.3.5遍歷二叉樹ABCDEF先序遍歷地遞歸算法:intBinaryTree::PreTraverse(BiTNode*p){ if(p!=NULL){

cout<<p->data<<‘‘; PreTraverse(p->lchild); PreTraverse(p->rchild); } return0;}tree主程序(PreTraverse(tree))cout<<p->data<<‘‘;A^APreTraverse(p->rchild);PreTraverse(p->lchild);A->Bcout<<p->data<<‘‘;PreTraverse(p->rchild);PreTraverse(p->lchild);B^B->DPreTraverse(p->rchild);PreTraverse(p->lchild);cout<<p->data<<‘‘;D^null->nullDnull->D->null->D->B->EE^Enull->nullnull->E->null->E->B->AC^->CCnull->null->C->FF^Fnull->nullnull->F->null->F->C->A先序遍歷地遞歸算法:intBinaryTree::PreTraverse(BiTNode*p){ if(p!=NULL){

cout<<p->data<<‘‘; PreTraverse(p->lchild); PreTraverse(p->rchild); } return0;}主程序(PreTraverse(tree))A^6.3.5遍歷二叉樹序:intBinaryTree::InTraverse(BiTNode*p){ if(p!=NULL){ InTraverse(p->lchild); cout<<p->data<<‘‘; InTraverse(p->rchild);} return0;}后序:intBinaryTree::PostTraverse(BiTNode*p){ if(p!=NULL){ PostTraverse(p->lchild); PostTraverse(p->rchild); cout<<p->data<<‘‘;} return0;}6.3.5遍歷二叉樹ABCDEF序遍歷地遞歸算法:intBinaryTree::InTraverse(BiTNode*p){ if(p!=NULL){ InTraverse(p->lchild); cout<<p->data<<‘‘; InTraverse(p->rchild); } return0;}主程序(PreTraverse(tree))A^InTraverse(p->lchild);cout<<p->data<<‘‘;InTraverse(p->rchild);treeB^InTraverse(p->lchild);cout<<p->data<<‘‘;InTraverse(p->rchild);D^InTraverse(p->lchild);cout<<p->data<<‘‘;InTraverse(p->rchild);nullnullDnullBE^nullEnullAF^C^nullCnullF6.3.5遍歷二叉樹非遞歸遍歷:利用棧實現(xiàn)(序為例)ABCDEFGvoidBinaryTree::InOrderTraverse(){ cout<<"序(非遞歸)遍歷二叉樹:"; BinTNode*p=bt; SqStacks(20); while(| ){ if(p){ s.Push(p); p=p->lchild;} else{ s.Pop(p); cout<<p->data<<‘‘; p=p->rchild;} } cout<<endl;}pA^F^B^C^!s.StackEmpty()pCABD^E^EG^GDF練習1.若二叉樹各結(jié)點地值均不相同,則由二叉樹地前序序列與序序列,或由其后序序列與序序列均能唯一地確定一棵二叉樹,但由前序序列與后序序列卻不一定能唯一地確定一棵二叉樹。(1)已知一棵二叉樹地前序序列與序序列分別為ABDGHCEFI與GDHBAECIF,請畫出此二叉樹。(2)已知一棵二叉樹地序序列與后序序列分別為BDCEAFHG與DECBHGFA,請畫出此二叉樹。練習答案:(1) (2)ABCDEFGHIABFCGDEH6.3.5遍歷二叉樹二叉樹遍歷地應用1.利用后序遞歸遍歷計算結(jié)點個數(shù)intBinaryTree::Size(BiTNode*p){ if(p==NULL) return0; else return1+Size(p->lchild)+Size(p->rchild);}6.3.5遍歷二叉樹二叉樹遍歷地應用2.利用先序遞歸遍歷復制二叉樹BiTNode*BinaryTree::GetTreeNode(intitem,BiTNode*lptr,BiTNode*rptr){ BiTreep; p=newBiTNode; p->data=item; p->lchild=lptr; p->rchild=rptr; returnp;}6.3.5遍歷二叉樹二叉樹遍歷地應用2.利用先序遞歸遍歷復制二叉樹BiTNode*BinaryTree::CopyTree(BiTNode*p){ BiTreenewlptr,newrptr,newnode; if(p==NULL) returnNULL; if(p->lchild) newlptr=CopyTree(p->lchild); elsenewlptr=NULL; if(p->rchild) newrptr=CopyTree(p->rchild); elsenewrptr=NULL; newnode=GetTreeNode(p->data,newlptr,newrptr); returnnewnode; }6.3.5遍歷二叉樹二叉樹遍歷地應用3.利用先序遞歸遍歷構(gòu)造二叉樹依次讀入二叉樹先序序列地值,每讀入一個值,就為它建立一個結(jié)點。以該結(jié)點作為根結(jié)點,其地址直接連接到作為實際參數(shù)地指針。然后分別對根地左,右子樹遞歸地建立子樹直到讀入"#"或"0"建立空子樹,遞歸結(jié)束。DRL序列:ABC##DE#G##F###6.3.5遍歷二叉樹intBinaryTree::RCreate(BiTNode*p,intk,intend){ BiTNode*q; inte; cin>>e; if(e!=end){ q=newBiTNode; q->data=e; q->lchild=NULL; q->rchild=NULL; if(k==1) p->lchild=q; if(k==2) p->rchild=q; RCreate(q,1,end);//遞歸創(chuàng)建左子樹 RCreate(q,2,end);//遞歸創(chuàng)建右子樹} return0;}6.3.5遍歷二叉樹voidBinaryTree::CreateBiTree(intend){ cout<<"請按先序序列地順序輸入二叉樹,end為空指針域代表:"<<endl; BiTNode*p; inte; cin>>e; if(e==end)return; p=newBiTNode; if(!p){ cout<<"申請內(nèi)存失??!"<<endl; exit(-1);} p->data=e; p->lchild=NULL; p->rchild=NULL; bt=p;//根結(jié)點 RCreate(p,1,end);//創(chuàng)建根結(jié)點左子樹 RCreate(p,2,end);//創(chuàng)建根結(jié)點右子樹 }6.3.6線索二叉樹遍歷二叉樹是按一定規(guī)則將二叉樹結(jié)點排列成一個線性序列之后依次進行訪問,在這些線性序列,除第一個結(jié)點之外,每個結(jié)點有且僅有一個前驅(qū)結(jié)點;除最后一個結(jié)點之外,每個結(jié)點有且僅有一個后繼結(jié)點。但是當以二叉鏈表作為存儲結(jié)構(gòu)時,只能找到結(jié)點地左,右孩子信息,而不能直接得到結(jié)點在任一序列地前驅(qū)與后繼信息,這種信息只能在遍歷地動態(tài)過程得到。如果能將二叉樹線索化,就可以簡化遍歷算法,提高遍歷速度。如何線索化?在二叉鏈表地結(jié)點添加兩個指針域,分別存放指向結(jié)點"前驅(qū)"與"后繼"地指針。6.3.6線索二叉樹一個具有n個結(jié)點地二叉樹若采用二叉鏈表存儲結(jié)構(gòu),在2n個指針域只有n-1個指針域是用于存儲孩子結(jié)點地地址,另外n+1個指針域為空。因此,可以利用這些空指針域存放指向該結(jié)點在某種遍歷序列地前驅(qū)與后繼結(jié)點地位置信息。6.3.6線索二叉樹線索二叉樹地概念若結(jié)點有左子樹,則其lchild域指示其左孩子,否則令lchild域指示其前驅(qū)結(jié)點;若結(jié)點有右子樹,則其rchild域指示其右孩子,否則令rchild域指示其后繼結(jié)點。為了區(qū)分結(jié)點地指針域存放地是指向孩子地指針還是指向前驅(qū)或后繼地指針,在結(jié)點地結(jié)構(gòu)增加兩個代表位域:ltag與rtag。其:ltag=rtag=指向結(jié)點前驅(qū)與后繼地指針稱為線索,加上線索地二叉樹稱為線索二叉樹,加上線索地二叉鏈表稱為線索鏈表。lchildltagdatartagrchild線索二叉樹結(jié)點結(jié)構(gòu)示意圖6.3.6線索二叉樹BGCDFAEH孩子指針前驅(qū)指針后繼指針序遍歷序列:D,B,H,E,A,F,C,G在序序列,D地后繼是B;H地前驅(qū)是B,后繼是E……線索二叉樹BGCDFAE6.3.6線索二叉樹HBGCDFAE0A00B0^1D10C00E11H11F11G1^lchildltagdatartagrchildtree序線索鏈表6.3.6線索二叉樹線索樹結(jié)點X地前驅(qū)與后繼查找:設結(jié)點X相應地左(右)代表是線索代表,則lchild(rchild)就是前驅(qū)(后繼),否則:LDR:后繼:右子樹地最左下結(jié)點前驅(qū):左子樹地最靠右邊地結(jié)點LxLRxLLRx地后繼x地前驅(qū)6.3.6線索二叉樹DLR:后繼:左子樹地根;若無左子樹,則其后繼為右子樹地根前驅(qū):RxRLxLR雙親是前驅(qū)XLRLx地前驅(qū)若結(jié)點x是其雙親地右孩子結(jié)點,但其雙親有左子樹,則x地前驅(qū)是其雙親地左子樹先序遍歷地最后一個結(jié)點若結(jié)點x是根結(jié)點,則x地前驅(qū)為空若結(jié)點是其雙親地左孩子,或是其雙親地右孩子但雙親無左子樹,則x地前驅(qū)是其雙親結(jié)點雙親是前驅(qū)6.3.6線索二叉樹LRD:若結(jié)點x是其雙親地左孩子,但其雙親有右子樹,則x地后繼是其雙親右子樹后序遍歷地第一個結(jié)點后繼:若結(jié)點x是雙親地右孩子,或是雙親地左孩子但雙親無右子樹,則x地后繼是其雙親結(jié)點若x是根結(jié)點,則x地后繼是空LxLRxLRx地后繼XRRL雙親是后繼前驅(qū):結(jié)點x地前驅(qū)是其右子樹地根結(jié)點,若無右子樹,則其前驅(qū)為左子樹地根結(jié)點6.3.6線索二叉樹DLR:對稱于LRD線索樹---將LRD所有左右互換,前驅(qū)與后繼互換,得到DLR地方法。6.3.6線索二叉樹線索二叉樹地遍歷為簡化線索鏈表地遍歷算法,仿照線性表地存儲結(jié)構(gòu),在二叉樹地線索鏈表上也添加了一個頭結(jié)點,并對有關結(jié)點地數(shù)據(jù)域地取值進行了約定。以序線索二叉樹為例:頭結(jié)點地lchild域存放指向線索鏈表地根結(jié)點地指針。頭結(jié)點地rchild域存放指向序序列地最后一個結(jié)點地指針。序遍歷序列地第一個結(jié)點地lchild域指針指向頭結(jié)點。序遍歷序列地最后一個結(jié)點地rchild域指針指向頭結(jié)點。6.3.6線索二叉樹基于上述鏈表結(jié)構(gòu),序線索鏈表T地序遍歷算法基本步驟如下:(1)令p=T->lchild;p指向線索鏈表地根結(jié)點。(2)若線索鏈表非空,則執(zhí)行①,②,③。順著p地左孩子指針找到最左下結(jié)點(序遍歷地第一個結(jié)點),并訪問之。若p所指結(jié)點地右孩子域為線索,則p地右孩子結(jié)點為后繼結(jié)點。循環(huán)執(zhí)行p=p->rchild,并訪問p所指結(jié)點(在此循環(huán),順著后繼線索訪問二叉樹地結(jié)點)。一旦"線索"斷,則p所指結(jié)點地右孩子域為右孩子指針,p=p->rchild,即p指向右孩子結(jié)點。返回(2)繼續(xù)執(zhí)行。直至鏈表為空。6.3.6線索二叉樹序線索鏈表遍歷:intThreadBiTree::InOrderTraverse_Thr(BiThrTreeT){ BiThrNode*p; p=T->lchild; while(p!=T){ while(p->LTag==0) p=p->lchild; cout<data<<'‘; while(p->RTag==1&&p->rchild!=T){ p=p->rchild; cout<data<<'‘;} p=p->rchild; } return1;}頭結(jié)點第六章樹與二叉樹6.1樹6.2森林6.3二叉樹6.4樹,森林與二叉樹地轉(zhuǎn)換6.5堆6.6哈夫曼樹與哈夫曼編碼6.4.1樹與二叉樹地轉(zhuǎn)換將一棵樹轉(zhuǎn)換成二叉樹地方法:加線:將樹所有相鄰兄弟之間加一條連線。抹線:對樹地每個結(jié)點,只保留它與第一個孩子結(jié)點之間地連線,刪除它與 其它孩子結(jié)點之間地連線。旋轉(zhuǎn):以樹地根結(jié)點為軸心,將整棵樹順時針旋轉(zhuǎn)45°,使之成為一棵層次分 明地二叉樹。CDFGHIBEA樹轉(zhuǎn)換成地二叉樹其右子樹必定為空6.4.2森林與二叉樹地轉(zhuǎn)換森林轉(zhuǎn)換成二叉樹地方法將樹地每棵樹轉(zhuǎn)換成相應地二叉樹第一棵二叉樹不動,從第二棵二叉樹開始,依次把后一棵二叉樹地根結(jié)點作為前一棵二叉樹根結(jié)點地右孩子ABCDFGHJIE練習1.試畫出下圖所示地二叉樹地序與后序線索樹與相應地線索鏈表。MBHCEGADKL練習序線索樹:EBMDAGKCHLNILNILBDACEGHMKLBD練習序線索鏈表:EBMDAGKCHL練習ACEGHMKLBDNIL后序線索樹:EMDBKGLHCA練習后序線索鏈表:EMDBKGLHCA練習2.將下圖所示地森林轉(zhuǎn)換為二叉樹123456789101112141315練習先將森林地每棵樹轉(zhuǎn)換為二叉樹12345678910111214131512練習再將這些二叉樹連接起來123456789101112141315練習3.已知森林地前序序列與后序序列分別為ABCDEFIGJH與BDCAIFJGHE,請畫出該森林。DBJEFACGHI先畫出對應地二叉樹練習3.已知森林地前序序列與后序序列分別為ABCDEFIGJH與BDCAIFJGHE,請畫出該森林。DBJEFCGHI再根據(jù)二叉樹畫出對應地森林A第六章樹與二叉樹6.1樹6.2森林6.3二叉樹6.4樹,森林與二叉樹地轉(zhuǎn)換6.5堆6.6哈夫曼樹與哈夫曼編碼6.5堆設有n個元素地序列{k1,k2,…,kn},當且僅當滿足下述關系之一時,稱之為堆(Heap)。或(i=1,2,…,[n/2]若以一維數(shù)組存儲堆,則堆對應為一棵完全二叉樹,且所有非葉子結(jié)點地值均不大于(或不小于)其子女地值,根結(jié)點地值是最?。ɑ蜃畲螅┑?。因此,也可以這樣來定義堆。6.5堆堆是具有下列其某一條性質(zhì)地完全二叉樹。(1)每個結(jié)點地值都小于或等于其左右孩子結(jié)點地值,稱為小根堆或小頂堆。(2)每個結(jié)點地值都大于或等于其左右孩子結(jié)點地值,稱為大根堆或大頂堆。1236248547305391968327119小頂堆大頂堆堆對應地是完全二叉樹,因此其類定義與基本操作可參考二叉樹地有關實現(xiàn)。第六章樹與二叉樹6.1樹6.2森林6.3二叉樹6.4樹,森林與二叉樹地轉(zhuǎn)換6.5堆6.6哈夫曼樹與哈夫曼編碼6.6.1哈夫曼樹地概念哈夫曼樹:又稱最優(yōu)二叉樹,是指一類帶權(quán)路徑長度最小地二叉樹。結(jié)點地權(quán):對結(jié)點賦予地一個有著某種意義地數(shù)值結(jié)點地帶權(quán)路徑長度:從樹根結(jié)點到該結(jié)點之間地路徑長度與該結(jié)點權(quán)值地乘積葉子結(jié)點:樹度為0地結(jié)點,也稱為終端結(jié)點樹地帶權(quán)路徑長度:樹所有葉子結(jié)點地帶權(quán)路徑長度之與 通常記作:WPL= 其,Wk為第k個葉子結(jié)點地權(quán)值,Lk為第k個葉子結(jié)點地路 徑長度6.6.1哈夫曼樹地概念例:計算下圖二叉樹地WPLcdab4257acbd5724adbc5724WPL=7*3+5*3+2*1+4*2=46WPL=7*2+5*2+2*2+4*2=36WPL=7*1+5*2+2*3+4*3=356.6.1哈夫曼樹地概念根據(jù)一組具有確定權(quán)值地葉子結(jié)點,可以構(gòu)造出不同地帶權(quán)二叉樹,其帶權(quán)路徑長度最小地二叉樹稱為哈夫曼樹,又稱最優(yōu)二叉樹。例:二叉樹有4個葉子結(jié)點,其權(quán)值分別為1,3,5,7,可以構(gòu)造出形狀不同地多個二叉樹。6.6.2哈夫曼樹地構(gòu)造根據(jù)給定n個權(quán)值{w1,w2,…,wn}構(gòu)造n棵二叉樹地集合F={T1,T2,…,Tn},其每棵二叉樹Ti只有一個權(quán)值為wi地根結(jié)點,其左,右子樹均空。在F選取兩棵根結(jié)點地權(quán)值最小地樹分別作為左,右子樹構(gòu)造一棵新地二叉樹,且將新地二叉樹地根結(jié)點地權(quán)值置為其左,右子樹上根結(jié)點地權(quán)值之與。在F刪除作為

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論