版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第六章 樹(shù)和二叉樹(shù)止一個(gè)直接前驅(qū)或后繼(樹(shù),圖等)數(shù)據(jù)結(jié)構(gòu):線性結(jié)構(gòu)(線性E表va,l棧ua,t隊(duì)io列n
o等nl)y.ated?wi非th線A性sp結(jié)os構(gòu)e.:Sl至id少es存f在or一.N個(gè)ET數(shù)3.據(jù)5
元Cl素ie有nt不ProfiCopyright
2004-2011
Aspose
Pty
Ltd.第六章 樹(shù)和二叉樹(shù)§6.1樹(shù)的定義樹(shù)是n個(gè)數(shù)據(jù)元Ev素al的ua有ti限on集o(n記l記y.為T(mén)),對(duì)ate任dw意it一h棵As樹(shù)poTs有e.:Slidesfor.NET3.5ClientProfi⒈ 存在唯Co一py一ri個(gè)gh稱t2為00根4-2的01數(shù)1A據(jù)sp元os素e;PtyLtd.⒉當(dāng)n>1時(shí),其它數(shù)據(jù)元素可分為m(m>0)個(gè)互不相交的有限集T1,T2,…,Tm,其中每個(gè)集合Ti(i=1,2,…,m)本身又是一棵樹(shù),并稱樹(shù)Ti是根的子樹(shù).第六章 樹(shù)和二叉樹(shù)B
CD2.
嵌套集合表示法ACBD樹(shù)的表示法1.
分支圖表示法EvaluatiAon
only.3.廣義表表示法(A(B(D),C))ated
with
Aspose.Slides
for
.NET
3.5
Client
ProfiCopyright
2004-2011
Aspose
Pty
Ltd.第六章 樹(shù)和二叉樹(shù)樹(shù)的基本術(shù)語(yǔ)樹(shù)的結(jié)點(diǎn):包含一個(gè)DE和指向其子樹(shù)的所有分支;結(jié)點(diǎn)的度:一個(gè)結(jié)點(diǎn)擁有的子樹(shù)的個(gè)數(shù),度為零的結(jié)點(diǎn)稱為葉結(jié)點(diǎn);
Evaluation
only.ate3d.w樹(shù)it的h
度As:p樹(shù)os中e.所S有l(wèi)i結(jié)de點(diǎn)s
的fo度r
的.N最ET大3值.5MaCaxl(iDe(nIt))Profi含義:C樹(shù)op中yr最i大gh分t
支2支0數(shù)04為-2樹(shù)01的1度As;pose
Pty
Ltd.4.
結(jié)點(diǎn)的層次及樹(shù)的深度:根為第一層,根的孩子為第二層,若某結(jié)點(diǎn)為第k層,則其孩子為k+1層.樹(shù)中結(jié)點(diǎn)的最大層次稱為樹(shù)的深度或高度
5.森林:是m(m>=0)棵互不相的樹(shù)的集合森林與樹(shù)概念相近,相互很容易轉(zhuǎn)換.第六章 樹(shù)和二叉樹(shù)§6.2 樹(shù)的基本運(yùn)算⒈ 初始化操作INITEIvAaTlEu(aTt)i:o創(chuàng)no建nl一y棵.空樹(shù)。ated⒉wit求h根As函po數(shù)sReRO.OSTl(iTd)e:s求fo樹(shù)rT.的NE根T;3.R5OOCTl(iXe)n:t求Profi結(jié)點(diǎn)x所在Co樹(shù)py的ri根g。ht2004-2011AsposePtyLtd.⒊ 求雙親函數(shù)PARENT(T,x):在樹(shù)T中求x的雙親。⒋ 求第i個(gè)孩子函數(shù)CHILD(T,x,i):在樹(shù)T中求結(jié)點(diǎn)x的第i個(gè)孩子。⒌ 求兄弟函數(shù):在T中求x的左兄弟LSIBLING(T,x);在樹(shù)T中求x的右兄弟RSIBLING(T,x)。第六章 樹(shù)和二叉樹(shù)第i根子樹(shù)。⒏ 刪除子樹(shù)操作DEL-CHILD(x,i):刪除x的第i棵子樹(shù)。⒐ 遍歷樹(shù)操作TRAVERSE(T):按順序訪問(wèn)樹(shù)T中各個(gè)結(jié)點(diǎn)。⒑ 置空樹(shù)操作CLEAR(T):將樹(shù)T置為空樹(shù)。⒍ 建樹(shù)函數(shù)CRT-TREE(x,F):建立以結(jié)點(diǎn)x為根,森林F為子樹(shù)的樹(shù)。Evaluationonly.ated⒎wit插h入As子po樹(shù)se操.作SlIiNdSe-sCHfIoLrD(.yN,EiT,x3).:5將Clxi作en為tyP的rofiCopyright
2004-2011
Aspose
Pty
Ltd.第六章 樹(shù)和二叉樹(shù)§6.3 二叉樹(shù)概念及性質(zhì)一. 二叉樹(shù)概念 Evaluationonly.atedwit二hA叉sp樹(shù)os是e.結(jié)Sl點(diǎn)id數(shù)es為fo0r或.每NE個(gè)T3結(jié).5點(diǎn)Cl最ie多nt只P有rofi左右兩棵Co子py樹(shù)ri的gh樹(shù)t2。00二4-叉20樹(shù)11是A一s一po種se特P殊ty的Lt樹(shù)d.,它的特點(diǎn)是:⑴每個(gè)結(jié)點(diǎn)最多只有兩棵子樹(shù),即不存結(jié)點(diǎn)度大于2的結(jié)點(diǎn);⑵子樹(shù)有左右之分,不能顛倒。6.3
二叉樹(shù)二. 二叉樹(shù)性質(zhì)性質(zhì)1. 在二叉樹(shù)的第Evia層lu上a至ti多on有o2nil-1y個(gè).結(jié)點(diǎn)(i≥1)。ate性dw質(zhì)i2t2.hA深s度p度o為sek.的Sl二id叉e樹(shù)sf至o多r多.有NE2Tk-31.個(gè)5結(jié)Cl點(diǎn)ie(nkt≥P)r。ofi(深度一C定o,py二ri叉gh樹(shù)t的20最04大-2結(jié)0點(diǎn)11數(shù)A也sp確os定e)PtyLtd.性質(zhì)3. 二叉樹(shù)中,終端結(jié)點(diǎn)數(shù)n0與度為2的結(jié)點(diǎn)數(shù)n2有如下關(guān)系: n0=n2+16.3
二叉樹(shù)12374K=3n=23-1=75
6滿二叉樹(shù)滿二叉樹(shù):深度為k,且有2k-1個(gè)結(jié)點(diǎn)的二叉樹(shù)。特點(diǎn):(1)每一層上結(jié)點(diǎn)數(shù)都達(dá)到最大(2)度為1的E結(jié)va點(diǎn)lnu1a=t0iononly.atedwi結(jié)t點(diǎn)hA層sp序o編se號(hào).S方li法de:s從fo根r結(jié).N點(diǎn)ET起3從.5上C到li下en逐t層Profi(層內(nèi)從C左op到y(tǒng)右ri)gh對(duì)t二20叉04樹(shù)-2的0結(jié)1結(jié)1點(diǎn)As進(jìn)p行os連e續(xù)P續(xù)t編yL號(hào)t。d.6.3
二叉樹(shù)45完全二叉樹(shù):深度為k,結(jié)點(diǎn)數(shù)為n的二叉樹(shù),當(dāng)且僅當(dāng)每個(gè)結(jié)點(diǎn)的編Ev號(hào)al都ua與t相io同no深n度ly的.滿二叉樹(shù)ated中wi從th1到Asnp的os結(jié)e點(diǎn).S一li一de對(duì)s應(yīng)fo時(shí)r,.N稱ET為3完.5全C二li叉en樹(shù)t。ProfiCopyright2004-2011AsposePtyLtd.12 36.3
二叉樹(shù)45完全二叉樹(shù)的特點(diǎn):每個(gè)結(jié)點(diǎn)i的左子樹(shù)的深度Lhi-其結(jié)點(diǎn)i的右子樹(shù)的深度Rhi等于E0v或a1l1,ua即ti葉on結(jié)o點(diǎn)nl只y.可能出現(xiàn)在ated層wi次th最A(yù)大sp或os次e最.S大li的de兩s層fo上r。.NET3.5ClientProfi完C全op二y叉r叉i樹(shù)gh結(jié)t點(diǎn)20數(shù)04n-滿20足121k-A1s-p1<o(jì)<sne≤P2tky-1Ltd.滿二叉樹(shù)一定是完全二叉樹(shù),反之不成立。12 36.3
二叉樹(shù)2LH
=03265411LH
=3RH
=11LH
-RH1=21Evaluation
only.ateRdHw2=i1th
As2pose.3Slides
for
.NET
3.5
Cli1ent
ProfiCopyright
2004-42011
A非完全二叉樹(shù)非完全二叉樹(shù)LH2-RH2=0-1=-1spose
Pty
Ltd.6.3
二叉樹(shù)性質(zhì)4. 結(jié)點(diǎn)數(shù)為n的完全二叉樹(shù),其深度為log2n┘+ 1Evaluationonly.└ated
with
Aspose.Slides
for
.NET
3.5
Client
ProfiCopyright
2004-2011
Aspose
Pty
Ltd.6.3
二叉樹(shù)性質(zhì)5. 在按層序編號(hào)的n個(gè)結(jié)點(diǎn)的完全二叉樹(shù)中,任意一結(jié)點(diǎn)i(1≤i≤Env)a有l(wèi)u:ationonly.雙親為結(jié)點(diǎn)└i/2┘。⑵ 2i>n時(shí),結(jié)點(diǎn)i無(wú)左孩子,為葉結(jié)點(diǎn);否則,結(jié)點(diǎn)i的左孩子為結(jié)點(diǎn)2i。⑶ 2i+1>n時(shí),結(jié)點(diǎn)i無(wú)右孩子;否則,結(jié)點(diǎn)i的右孩子為結(jié)點(diǎn)2i+1。ated⑴witih=1A時(shí)sp,os結(jié)e點(diǎn).Sil是id樹(shù)es的f根or;.否NE則T(3i.>51)C,li結(jié)en點(diǎn)tiP的rofiCopyright
2004-2011
Aspose
Pty
Ltd.6.3
二叉樹(shù)完全二叉樹(shù)DCGFEBA三、二叉樹(shù)的存儲(chǔ)結(jié)構(gòu)⒈ 順序存儲(chǔ)結(jié)構(gòu)用一組地址連續(xù)的存儲(chǔ)單元,以層序順序存放二叉樹(shù)bt[3]的雙親為└3/2┘=1,即在bt[1]中;其左孩子在bt[2i]=bt[6]中;其右孩子在bt[2i+1]=bt[7]中。A
B
C
D
E
F
G
0
0
0
0的數(shù)據(jù)元素,結(jié)點(diǎn)的相對(duì)Ev位a置lu蘊(yùn)a含t含i著on結(jié)o點(diǎn)n之ly間.的關(guān)系。atedwithAspose.Slidesfor.NET3.5ClientProfiCopyright2004-12201314A5s6p7o8se91P01t1yLtd.6.3
二叉樹(shù)這種存儲(chǔ)結(jié)構(gòu)適合于完全二叉樹(shù),既不浪費(fèi)存儲(chǔ)空間,又能很快確定結(jié)點(diǎn)的存放位置、以及結(jié)點(diǎn)的雙親和左右孩子的存放位置,但對(duì)一般二叉樹(shù),可能造成存儲(chǔ)空間的浪費(fèi)。D二叉樹(shù)FB
CAA
B
C
D
E
0
0
0
0
F
G
0
0
0
0Ev1a2lu3a4ti5
o6
n7
o8
n9l10y1.1一般二叉樹(shù)也按完全二叉樹(shù)形式存儲(chǔ),沒(méi)結(jié)點(diǎn)處用0表示。ated
with
Aspose.Slides
for
.NET
3.5
Client
ProfiCEopyright
2004-2011
Aspose
Pty
Ltd.G6.3
二叉樹(shù)例如,深度為k,且只有k個(gè)結(jié)點(diǎn)的右單枝樹(shù)(每個(gè)非葉結(jié)點(diǎn)只有右孩子)E,va需lu2ka-t1i個(gè)on單o元nl,y.即有2k-1-atekd個(gè)w單it元h被As浪po費(fèi)s。e.Slidesfor.NET3.5ClientProfiCopyright12004-2011AsposePtyLtd.k6.3
二叉樹(shù)⒉ 鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)設(shè)計(jì)不同的結(jié)點(diǎn)E結(jié)va構(gòu)lu,a可t可i以on構(gòu)o成nl不y.同的鏈?zhǔn)酱鎍ted儲(chǔ)w結(jié)it構(gòu)h。As常po用se的.有Sl:idesfor.NET3.5ClientProfi二叉鏈C表opyright2004-2011AsposePtyLtd.三叉鏈表線索鏈表 用空鏈域存放指向前驅(qū)或后繼的線索6.3
二叉樹(shù)D二叉樹(shù)CEBACBDE∧∧
∧∧∧∧二叉鏈表
A二叉鏈表的結(jié)點(diǎn)結(jié)構(gòu)Evaluation
only.ated
with
Aslcphoislde.Sldiadtesa
forrch.ilNdET
3.5
Client
ProfiCopyright
2004-2011
Aspose
Pty
Ltd.6.3
二叉樹(shù)三叉鏈表的結(jié)點(diǎn)結(jié)構(gòu)lchild
data
parent
rchildD二叉樹(shù)CEBAACBDE∧∧
∧∧∧∧∧三叉鏈表Evaluation
only.ated
with
Aspose.Slides
for
.NET
3.5
Client
ProfiCopyright
2004-2011
Aspose
Pty
Ltd.6.3
二叉樹(shù)性質(zhì)6. 含有n個(gè)結(jié)點(diǎn)的二叉鏈表中,有n+1個(gè)空鏈域。Evaluationonly.atedwithAspose.Slidesfor.NET3.5ClientProfiCopyright2004-2011AsposePtyLtd.6.4
遍歷二叉樹(shù)和線索二叉樹(shù)一、遍歷二叉樹(shù)遍歷二叉樹(shù)是指按一定的規(guī)律對(duì)二叉樹(shù)的每個(gè)結(jié)點(diǎn),訪問(wèn)且僅訪問(wèn)一次的處理過(guò)程。訪問(wèn)是一種抽象操作Ev,al是ua對(duì)ti結(jié)o點(diǎn)no的nl某y種.處理,例如ate可d以wi是th求A結(jié)sp點(diǎn)os的e.度S、l、i或de層s次fo、r打.打N印ET結(jié)3點(diǎn).5的C信l信i息en,t或Pr做ofi其他任何工Co作py。right2004-2011AsposePtyLtd.一次遍歷后,使樹(shù)中結(jié)點(diǎn)的非線性排列,按訪問(wèn)的先后順序變?yōu)槟撤N線性排列。遍歷的次序:若設(shè)二叉樹(shù)根為D,左子樹(shù)為L(zhǎng),右子樹(shù)為R,并限定先左后右,則有以下三種遍歷次序:LDR 中序遍歷;LRD 后序遍歷;DLR 先序遍歷6.4
遍歷二叉樹(shù)和線索二叉樹(shù)1.中序遍歷二叉樹(shù)算法思想:若二叉樹(shù)非空,則:訪問(wèn)根結(jié)點(diǎn)中序遍歷右子樹(shù)算法描述:PROCinorder(bt:bitreptr);[inorder(bt↑.lchild);visit(bt↑.data);inorder(bt↑.rchild);]ENDP;
{inorder}Evaluation
only.ated
with
Aspose.Slides{bfto為r
B.TN根ET結(jié)3點(diǎn).5指C針li}ent
Profi1)中序遍C歷op左yr子ig樹(shù)ht
20I0F4-b2t0<1>N1IALsTpHoEsNe
Pty
Ltd.6.4
遍歷二叉樹(shù)和線索二叉樹(shù)2.后序遍歷二叉樹(shù)算法思想:后序遍歷右子樹(shù)訪問(wèn)根結(jié)點(diǎn)IFbt<>NILTHEN[postorder(bt↑.lchild);postorder(bt↑.rchild);visit(bt↑.data);]ENDP;{postorder}Ev算al法ua描ti述o:n
only.ate若d二wi叉th樹(shù)A非sp空os,e.則S:l:idePsROfCopro.sNtoErTde3r.5(bCtl:ibeinttrePprtorf)i;1)后序遍C歷op左yr子ig樹(shù)ht
2{0b0t4為-2B0T1根1結(jié)As點(diǎn)p指os針e
}Pty
Ltd.6.4
遍歷二叉樹(shù)和線索二叉樹(shù)3.先序遍歷二叉樹(shù)算法思想:2)
先序遍歷左子樹(shù)3)先序遍歷右子樹(shù)IFbt<>NILTHEN[visit(bt↑.data);preorder(bt↑.lchild);preorder(bt↑.rchild);]ENDP;{preorder}Ev算al法ua描ti述o:n
only.ate若d二wi叉th樹(shù)A非sp空os,e.則S:l:idePsROfCoprr.eNoErdTe3r.(5btC:libeinttrePprtorf)i1)訪問(wèn)根C結(jié)op點(diǎn)yright
2{0b0t4為-2B0T1根1結(jié)As點(diǎn)po指s針e針P}ty
Ltd.6.4
遍歷二叉樹(shù)和線索二叉樹(shù)cdb
-a
×
e
f例:表達(dá)式 a+b×(c-d)-e/fEvaluationonly.atedwithAsp-ose.Slidesf遍or歷.N結(jié)E果T3:.5ClientProfi++Copyr/ight2004中-2序01:1aA+sbp×osce-Ptdy-Lted.//f后序:abcd-×+ef/-先序:-+a×b-cd/ef6.4
遍歷二叉樹(shù)和線索二叉樹(shù)三種遍歷過(guò)程示意圖例acb×—b-ba
a-—aba
b虛線表示執(zhí)行過(guò)程:向下表示更深層的遞歸調(diào)用;向上表示遞歸調(diào)用返回;沿虛線記下各類(lèi)符號(hào),便得到遍歷的結(jié)果.Evaluation
only-.ated
with
Aspose.Slide*s
for
.×NET
3*.5cClienct
ProfciCopyright
2004-20*11
Aspose
PtycLtd.6.4 遍歷二叉樹(shù)和線索二叉樹(shù)PROC
inorder(bt:bitreptr);{中序遍歷非遞歸算法,s為存儲(chǔ)二叉樹(shù)結(jié)點(diǎn)指針棧}
INISTACK(s);push(s,bt);[
WHILE
GETTOP(s)<>NIL
DOIF
NOT
EMPTY(s)
THEN[
visit(GETTOP(s)↑.data);p:=POP(s);PUSH(s,
p↑.rchild)]]ENDP;{inorder}左結(jié)點(diǎn)緊跟根后面一次和出一次棧,并且總是訪問(wèn)棧頂元素,因此,算法正確,時(shí)間復(fù)雜度為O(n)。WHILE NOTEMPTY(sE)vDaOluationonly?.根結(jié)點(diǎn)先進(jìn)棧,ated
with
Aspose.Slides
for
.NET
3.進(jìn)5
棧Cl,i右e結(jié)nt點(diǎn)P在r根ofiPUSCHo(sp,yGrEiTgThOPt(2s)0↑04.-l2c0hi1l1d)A;spo出s棧e
后Pt入y棧Ltd.p:=POP(s);每個(gè)結(jié)點(diǎn)都要進(jìn)6.4
遍歷二叉樹(shù)和線索二叉樹(shù)二、線索二叉樹(shù)⒈ 問(wèn)題的提出:通Ev過(guò)al遍ua歷ti二on叉o樹(shù)n樹(shù)ly可.得到結(jié)點(diǎn)ate的dw一it個(gè)h線As性po序se列.S,li在d在es線f性or序.N列ET中3,.5就Cl存ie在nt結(jié)Pr點(diǎn)ofi和前驅(qū)和C后op繼yr,ig但ht是20在04二-2叉01樹(shù)1A上sp只os能e找Pt到y(tǒng)L結(jié)td點(diǎn).的左孩子、右孩子,結(jié)點(diǎn)的前驅(qū)和后繼只有在遍歷過(guò)程中才能得到,那么,能否通過(guò)結(jié)點(diǎn)的兩個(gè)鏈域查找出任一結(jié)點(diǎn)的前驅(qū)和后繼?6.4
遍歷二叉樹(shù)和線索二叉樹(shù)2. 分析:n個(gè)結(jié)點(diǎn)有n-1個(gè)Ev前al驅(qū)ua和tino-n-1o個(gè)nl后y.繼;atedwithAspose.Slidesfor.NET3.5ClientProfi一共C有op2ynr個(gè)ig鏈ht域2,0,04其-2中01:1nA+s1p個(gè)os空eP鏈ty域Lt,d.n-1個(gè)指針域;因此, 必須用空鏈域來(lái)存放結(jié)點(diǎn)的前驅(qū)和后繼。線索二叉樹(shù)就是利用n+1個(gè)空鏈域來(lái)存放結(jié)點(diǎn)的前驅(qū)和后繼結(jié)點(diǎn)的信息。6.4 遍歷二叉樹(shù)和線索二叉樹(shù)lchild
ltag
data
rtag
rchild3. 線索二叉樹(shù):⑴ 結(jié)點(diǎn)結(jié)構(gòu)在二叉鏈表中增加 ltag 和 rtag 兩個(gè)標(biāo)志域Evaluationonly.若結(jié)點(diǎn)有左子樹(shù),則左鏈域lchild指示其左孩子(ltag=0);否則,令左鏈域指示其前驅(qū)(ltag=1);若結(jié)點(diǎn)有右子樹(shù),則右鏈域rchild指示其右孩子(rtag=0);否則,令右鏈域指示其后繼(rtag=1);ated
with
Aspose.Slides
for
.NET
3.5
Client
ProfiCopyright
2004-2011
Aspose
Pty
Ltd.6.4 遍歷二叉樹(shù)和線索二叉樹(shù)的過(guò)程稱為線索化。按中序遍歷得到的線索二叉樹(shù)稱為中序線索二叉樹(shù);按先序遍歷得到的線索二叉樹(shù)稱為先序線索二叉樹(shù);按后序遍歷得到的線索二叉樹(shù)稱為后序線索二叉樹(shù);稱這種結(jié)點(diǎn)結(jié)構(gòu)為線索鏈表;其中指示前驅(qū)和后E繼va的lu鏈a域ti稱on為o線nl索y.;ated?w加it上h線As索p的o的s二e.叉Sl樹(shù)id稱e為s為f線or索.二NE叉T樹(shù)3.;5
Client
Profi對(duì)二叉C樹(shù)o以p以y某ri種gh次t序20遍04歷-2使0其11變A為s為p線os索e
二Pt叉y
樹(shù)L樹(shù)td.6.4 遍歷二叉樹(shù)和線索二叉樹(shù)acb×—0
-
01
c
10
×
01
b
11
a
1(2)整體結(jié)構(gòu)增設(shè)一個(gè)頭結(jié)點(diǎn),令其lchild指向二叉樹(shù)的根結(jié)點(diǎn),ltag=0、rtag=1;并將該結(jié)點(diǎn)作為遍Ev歷a訪lu問(wèn)at的io第n一on個(gè)ly結(jié).點(diǎn)的前驅(qū)ated和wi最t后hA一s個(gè)po結(jié)se點(diǎn).S的li后d繼es;for.NET3.5ClientProfi最后用C頭op指yr針ig指ht示2該00頭4結(jié)-2點(diǎn)01。1Aspo0sePt1yLtd.6.4 遍歷二叉樹(shù)和線索二叉樹(shù)4. 遍歷線索二叉樹(shù):有了線索二叉樹(shù),就容易遍歷二叉樹(shù)了.Evaluationonly.ated只w要ithAspose.Slidesfor.NET3.5ClientProfi(1)先Co找py要ri遍gh歷t2的00第4-一20個(gè)11結(jié)A點(diǎn)sp;osePtyLtd.(2)然后依次找結(jié)點(diǎn)的后繼;(3)重復(fù)(2)直到其后繼為頭結(jié)點(diǎn).所有問(wèn)題歸為如何在線索二叉樹(shù)中找結(jié)點(diǎn)的后繼?6.4 遍歷二叉樹(shù)和線索二叉樹(shù)1)遍歷中序線索二叉樹(shù)(1)中序線索二叉樹(shù)Ev中al,ua找t結(jié)io點(diǎn)n的on后ly繼.算法ated算w法it思h想As:po對(duì)s任e.意Sl結(jié)id點(diǎn)epsp,fo若rr.tNaEgT=13,.5則CrlciheinldtdProfi指向該結(jié)C點(diǎn)op的y后ri繼gh;t若20r0t4a-g2=00,1,1則Asrcphoisled指P指t向yL該td.結(jié)點(diǎn)的右孩子,此時(shí),應(yīng)從右孩子開(kāi)始,沿左指針前進(jìn),直到找到?jīng)]有左孩子的結(jié)點(diǎn)s(ltag=1),則s就是p的后繼,即后繼是中序遍歷右子樹(shù)時(shí),訪問(wèn)的第一個(gè)結(jié)點(diǎn);6.4 遍歷二叉樹(shù)和線索二叉樹(shù)中序線索二叉樹(shù)中,找結(jié)點(diǎn)的后繼算法FUNC in_next(p,thrEtv:atlhulaintkitopn):otnhllyin.ktp;結(jié)點(diǎn)的后繼}s:=p↑.rchild;IF
p↑.rtag=0
THENWHILE
s↑.ltag=0
DOs:=
s↑.lchild;RETURN(s)ENDIF;{in_next}p1spated{w在i以ththArst為po頭s指e.針S的li中d序es線f索o二r
叉.N樹(shù)E上T
,3查.5找C指l針iep所nt指Profi010sCopyright
2004-2011
Aspose
Pty
Ltd.6.4 遍歷二叉樹(shù)和線索二叉樹(shù)(2)遍歷中序線索二叉樹(shù)算法PROC
thrt_inorder(thrt:thlinktp);{遍歷以thrt為頭指針的中序線索二叉樹(shù)}p↑.ltag=0Evaluation
only.ated
wipt:=htAhsrtp↑os.el.cShillidd;es
for
.NET
3.5
Client
ProfiWHILECpo↑py.rlicghihltd<2>0t0h4r-t2D0O11p:A=sppo↑s.elPchtiylLd;td.{定位要遍歷的第一個(gè)結(jié)點(diǎn).}WHILE
p<>thrt
DO
[
visit(p↑.data);p:=in_next(p,thrt)]ENDP;{thrt_inorder}6.4 遍歷二叉樹(shù)和線索二叉樹(shù)2)遍歷后序線索二叉樹(shù)(1)后序線索二叉樹(shù)中,找結(jié)點(diǎn)的后繼算法若p是雙親的右孩子、或是獨(dú)生左孩子,則后繼為雙親;若p是有兄弟的左孩子,則后繼為雙親的右子樹(shù)上按后序遍歷時(shí),訪問(wèn)的第一個(gè)結(jié)點(diǎn)(葉結(jié)點(diǎn));spspssEvaluation
onlpy.ated算w法it思h想As:po對(duì)se任.意Sl結(jié)id點(diǎn)esp,for.NET3.5ClientProfi若p為二Co叉py樹(shù)r的ig根ht,2則00無(wú)4-后20繼1;1;AsposePtyLtd.6.4 遍歷二叉樹(shù)和線索二叉樹(shù)后序線索二叉樹(shù)中,找結(jié)點(diǎn)的后繼算法FUNC post_next(p,thrt:thlinktp):thlinktp;{在以thrt為頭指針的后序線索二叉樹(shù)上,查找指針p所指結(jié)點(diǎn)的后繼
}Evaluation
only.atedwist:=hpAasrepnots(et.hSrlti,dep)s;fo{r在.tNhrEtT上3查.5找Cp的li雙e親n親t}ProfiIFs=CthorptyrTiHEgNhtRE2T0U0R4N-(t2h0r1t1);AsposePtyLtd.IF s↑.rchild=pORs↑.rtag=1THEN RETURN(s);WHILE s↑.rtag=0DO[s:=s↑.rchild;WHILE s↑.ltag=0DO s:=s↑.lchild;]RETURN(s)ENDIF;{post_next}6.4 遍歷二叉樹(shù)和線索二叉樹(shù)(2)遍歷后序線索二叉樹(shù)算法PROC
thrt_postorder(thrt:thlinktp);{遍歷以thrt為頭指針的后序線索二叉樹(shù)}IF
thrt<>thrt↑.ElvcahliuladtTiHoEnN
only.ated
wit[hpA:s=tphorste↑.S.llcihdielsd;forse.aNrcEhT:3=t.r5ueC;lient
ProfiWHCILoLEpysreiagrhcht
2DO0O04-2011
Aspose
Pty
Ltd.[
WHILE
p↑.ltag=0
DO
p:=
p↑.lchild;IF
p↑.rtag=0
THEN
p:=
p↑.rchildELSE
search:=false;]WHILE
p<>thrt
DO
[
visit(p↑.data);p:=post_next(p,thrt)]]ENDP;{thrt_postorder}6.4 遍歷二叉樹(shù)和線索二叉樹(shù)3)遍歷先序線索二叉樹(shù)先序線索二叉E樹(shù)va中l(wèi)u,at找i結(jié)on點(diǎn)o的nl后y.繼算法ated算wi法th思A想sp:os對(duì)e任.S意li結(jié)de點(diǎn)spf:or.NET3.5ClientProfi若p有C左op孩y子ri,gh則t后20繼04為-2左0孩1孩1子As;posePtyLtd.若p無(wú)左孩子,有右孩子,則后繼為右孩子;若p無(wú)左孩子,也無(wú)右孩子,則后繼為右線索;6.4 遍歷二叉樹(shù)和線索二叉樹(shù)先序線索二叉樹(shù)中,找結(jié)點(diǎn)的后繼算法FUNC pre_next(p,thErvta:ltuhalitnikotnp)o:ntlhyli.nktp;ated{w在i以t以hthArstp為o頭se指.針Sl的i先d先e序s線fo索r二.叉NE樹(shù)T上3,.查5找Cl指i針enpt所P指rofi結(jié)點(diǎn)的后C繼op}yright2004-2011AsposePtyLtd.IF p↑.ltag=0THEN RETURN(p↑.lchild);ELSE RETURN(p↑.rchild)ENDIF;{pre_next}6.4 遍歷二叉樹(shù)和線索二叉樹(shù)(2)遍歷先序線索二叉樹(shù)算法PROC
thrt_preorderE(vtahlruta:tthiloinnkotnpl)y;.ated{w遍i歷t歷h以Atshprto為se頭.指Sl針i的d的e先s序fo線r索.二NE叉T樹(shù)3}.5
Client
Profip:=thCrto↑py.rlicghihltd;2004-2011
Aspose
Pty
Ltd.WHILE
p<>thrt
DO
[
visit(p↑.data);p:=pre_next(p,thrt)]ENDP;{thrt_preorder}6.5樹(shù)和森林一.樹(shù)的存儲(chǔ)結(jié)構(gòu)1.雙親表示法432651123456data
parent011222用一組地址連續(xù)的存儲(chǔ)單元來(lái)存放樹(shù)的結(jié)點(diǎn),每個(gè)結(jié)點(diǎn)有兩個(gè)域:Evaluationonly.atedwidtahtaAa域sp-o-s-e-.-S存li放d結(jié)es點(diǎn)f的or信.N息E;T3.5ClientProfiparenCto域py-r-i-g-h-t存2放00該4結(jié)-2點(diǎn)01雙1親As結(jié)po點(diǎn)se的P位ty置L.td.特點(diǎn):求結(jié)點(diǎn)的雙親很容易,但求結(jié)點(diǎn)的孩子需要遍歷整個(gè)向量。6.5
樹(shù)和森林2.孩子表示法每個(gè)結(jié)點(diǎn)的孩子用單鏈表存儲(chǔ),稱為孩子鏈表。n個(gè)結(jié)點(diǎn)可以有n個(gè)孩子鏈表(葉結(jié)點(diǎn)的孩子鏈表為空表)。如圖:12345663524∧∧∧∧∧∧特點(diǎn):與1相反,求孩子易,求雙親難。Evaluation
only.ated
wint個(gè)h
孩A孩s子po鏈se表.S的l頭i頭d指es針f用or一.個(gè)N個(gè)E向T
3量.表5
C示l。i。ent
Profi頭C頭o指py針ri向gh量t
2004-20孩11子A鏈sp表ose
Pty
Ltd.6.5
樹(shù)和森林3.雙親孩子表示法.在孩子表示法的頭指針向量中,增加一項(xiàng),用來(lái)如圖: 頭指針向量 孩子鏈表01122212345663524∧∧∧∧∧∧表示該結(jié)點(diǎn)的雙親。Evaluation
only.ated
with
Aspose.Slides
for
.NET
3.5
Client
ProfiCopyright
2004-2011
Aspose
Pty
Ltd.6.5
樹(shù)和森林4.孩子兄弟表示法.用二叉鏈表作為樹(shù)的存儲(chǔ)結(jié)構(gòu),每個(gè)結(jié)點(diǎn)的左鏈域指向該結(jié)點(diǎn)的第一個(gè)孩子,右鏈域指向下一個(gè)兄弟結(jié)點(diǎn)。如圖:∧∧∧∧123456∧∧∧雙親只管長(zhǎng)子長(zhǎng)子連接兄弟Evaluation
only.ated
with
Aspose.Slides
for
.NET
3.5
Client
ProfiCopyright
2004-2011
Aspose
Pty
Ltd.6.5
樹(shù)和森林二、森林、樹(shù)與二叉樹(shù)的對(duì)應(yīng)關(guān)系Evaluationonly.atedw1it、h樹(shù)As與po二s叉e.樹(shù)Sl的id對(duì)es應(yīng)f關(guān)or系.NET3.5ClientProfi樹(shù)C與op二y叉ri樹(shù)gh均t可20用04二-2叉0鏈11表As作p為os存eP儲(chǔ)t結(jié)yL構(gòu)t,d.因此給定一棵樹(shù),用二叉鏈表存儲(chǔ),可唯一對(duì)應(yīng)一棵二叉樹(shù),反之亦然。AB
C
E∧
BC∧∧
E∧A∧∧
DDECbA∧
BC∧
∧∧
D
∧
E樹(shù)DEvaluation
only.a(t1ed)w孩i子th兄A弟sp法ose.Slides
for
.NET
3.5
Client
ProfiCopyrigh(t22)00順4時(shí)-2針0轉(zhuǎn)114A5s度pose
PtyALt∧d.解釋?zhuān)築是A的第一個(gè)孩子,C.E是B的兄弟,D是C的第一個(gè)孩子。解釋:B是A的左孩子,C是B的右孩子。6.5
樹(shù)和森林樹(shù)變?yōu)槎鏄?shù)的方法(1)在兄弟之間加一連線;(2)對(duì)每一個(gè)結(jié)點(diǎn),只保留它與第一個(gè)孩子的Evaluation
only.ated
with
Aspose.Slides
for
.NET
3.5
Client
Profi連線,去Co掉py與r其ig他ht孩2子00的4-連20線1;1;AsposePtyLtd.(3)以樹(shù)根為軸心,將整棵樹(shù)順時(shí)針旋轉(zhuǎn)45度。特點(diǎn):根無(wú)右子樹(shù)6.5
樹(shù)和森林2.森林與二叉樹(shù)的對(duì)應(yīng)關(guān)系森林轉(zhuǎn)換為二叉E樹(shù)va的lu方at法iononly.ate?d將wi森th林AsFp=o{sTe1,.TS2l.i.d.eTsm}f的o各r.棵NE樹(shù)T分3.別5轉(zhuǎn)Cl成ie二n叉tP樹(shù)rofiBT1,BT2..C.oBpTymright2004-2011AsposePtyLtd.將BTi+1作為BTi根結(jié)點(diǎn)的右子樹(shù)(i=1,2,...,m-1),得到一棵BT。6.5
樹(shù)和森林如圖:F={T1,T2,T3}DBCABT1
BT2FEEAH
IGT1T2
T3BT3HJIJIFEG
BDHGCEvaluation
only.ateBd
wiCth
AsDpose.SlFides
for
.NETJ3.5
Client
ProfiCopyright
2004-2011
Aspose
PAty
Ltd.6.5
樹(shù)和森林JIHGFBCDA1BCDAFE
ET23JIHG(2)二叉樹(shù)轉(zhuǎn)換森林的方法將當(dāng)前根結(jié)點(diǎn)和其左子樹(shù)作為森林的一棵樹(shù),并將其右子樹(shù)作為森林的其他子樹(shù);Evaluation
only.ated
?wi重t復(fù)h
A上s面p面o直se到.S某li結(jié)d點(diǎn)e點(diǎn)s的fo右r子.N樹(shù)E為T(mén)為3空.5。Client
ProfiCopyrightT2004-2011
Aspose
TPty
Ltd.6.6
哈夫曼樹(shù)及其應(yīng)用哈夫曼樹(shù)(Huffman)樹(shù)是一類(lèi)帶權(quán)路徑長(zhǎng)度最短的樹(shù)一、Huffman樹(shù)(最優(yōu)二叉樹(shù))1.概念2763415例⑴-⑵-⑸為結(jié)點(diǎn)1到5之間的路徑,其路長(zhǎng)度為2,樹(shù)的路徑長(zhǎng)度=l12+l13+l14+l15+l16+l17=1+1+2+2+2+2=10Evaluation
only.ated?w兩it結(jié)h點(diǎn)As間p的os路e徑.S:l從id一e結(jié)s點(diǎn)f點(diǎn)o到r另.N一E結(jié)T點(diǎn)3.所5經(jīng)C過(guò)li的e結(jié)n結(jié)t點(diǎn)P序ro列fi路徑長(zhǎng)C度o:py路r徑ig上h的t分20支0樹(shù)4樹(shù)-2011AsposePtyLtd.樹(shù)的路徑長(zhǎng)度:從根到每一結(jié)點(diǎn)的路徑長(zhǎng)度之和6.6
哈夫曼樹(shù)及其應(yīng)用長(zhǎng)度為樹(shù)中所有葉結(jié)點(diǎn)的權(quán)值與路徑長(zhǎng)度的乘積的總和。完全二叉樹(shù)是路徑長(zhǎng)度最短的二叉樹(shù)。考慮帶權(quán)時(shí):E設(shè)v樹(shù)al中ua有timo個(gè)n葉on結(jié)ly點(diǎn).,每個(gè)atedw葉it結(jié)h點(diǎn)As帶po一s個(gè)e.權(quán)Sl值idweis且f根or到.葉NE結(jié)T點(diǎn)3.i5的C路li徑en長(zhǎng)tProfi度為L(zhǎng)iC(oipy=r1i,g2h,t2.0.04-m2)0,11則A樹(shù)sp的os帶e權(quán)Pt路y徑Ltd.M即:WPL=∑WkLkK=16.6
哈夫曼樹(shù)及其應(yīng)用例:使WPL最小的二叉樹(shù)成為最優(yōu)二叉樹(shù)(Huffman樹(shù))dca7b5
2
4d4a7b5WPLa=2*7+2*5+2*2+2*4=36WPLb=7*3+5*3+2*1+4*2=46完全二E叉va樹(shù)luation
only.ated
with
Aspose.Slides
for
.NET
3.5
Clicent
ProfiCopyright
2004-2011
Aspose
P2ty
Ltd.6.6
哈夫曼樹(shù)及其應(yīng)用Huffman樹(shù)WPLc=7*1+5*2+2*3+4*3=35ba5c2d4不一定是Huffman樹(shù);的越靠近根結(jié)點(diǎn);(3)HT不唯一,但WPL一定相等。Evaluation
only.ated
with
A7spose.Slides
for
.NE(T1)3.完5全Cl二i叉en樹(shù)t并ProfiCopyright
2004-2011(A2s)pHoTs是e權(quán)Pt值y越L大td.6.6
哈夫曼樹(shù)及其應(yīng)用2.構(gòu)造Huffman樹(shù)算法(1)以權(quán)值分別為W1,W2...Wn的n各結(jié)點(diǎn),構(gòu)成n棵二叉樹(shù)T1,T2,...Tn并組E成v森al林uFa=t{iTo1,nT2o,.nl.y..Tn},其中每棵(2)在F中選取兩棵根結(jié)點(diǎn)權(quán)值最小的樹(shù)作為左右子樹(shù)構(gòu)造(4)重復(fù)(2).(3)直到F中只含一棵二叉樹(shù)為止,這棵二叉樹(shù)就是Huffman樹(shù)。ated二wi叉t樹(shù)h
ATis僅p有o有s一e.個(gè)S權(quán)l(xiāng)i值d為esWif的o根r根.結(jié)N點(diǎn)ET;3.5
Client
Profi一棵新二C叉o樹(shù)py,r并i并g且ht置2新0二04叉-樹(shù)20根1結(jié)1點(diǎn)As權(quán)po值s為e左Pt右y子L樹(shù)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 灌區(qū)管理考試題目及答案
- 妊娠合并心臟病產(chǎn)后抗凝治療的精準(zhǔn)醫(yī)療策略
- 產(chǎn)品造型基礎(chǔ)試題及答案
- 2026普法考試題庫(kù)及答案
- 婦幼健康服務(wù)供給優(yōu)化策略
- 大數(shù)據(jù)定量報(bào)告優(yōu)化策略
- 病句考試題及答案
- 工地電工考試及答案
- 口語(yǔ)考試雅思問(wèn)題及答案
- 多組學(xué)數(shù)據(jù)整合在疾病預(yù)測(cè)中的價(jià)值
- 2023-2024學(xué)年北京市海淀區(qū)清華附中八年級(jí)(上)期末數(shù)學(xué)試卷(含解析)
- 臨終決策中的醫(yī)患共同決策模式
- 2026年包頭輕工職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試備考題庫(kù)及答案詳解
- 草原補(bǔ)償協(xié)議書(shū)
- 防護(hù)網(wǎng)施工專(zhuān)項(xiàng)方案
- 九年級(jí)物理 2025-2026學(xué)年九年級(jí)上學(xué)期期末物理試題及答案 2025-2026學(xué)年度上學(xué)期期末教學(xué)質(zhì)量測(cè)查九年級(jí)物理試卷
- 離婚協(xié)議書(shū)模板(模板)(通用)
- (完整版)第一性原理
- 降低住院患者口服藥缺陷率教學(xué)課件
- 《質(zhì)量管理與控制技術(shù)基礎(chǔ)》第一章 質(zhì)量管理基礎(chǔ)知識(shí)
- 高一年級(jí)主任工作總結(jié)(4篇)
評(píng)論
0/150
提交評(píng)論