版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第六章 樹和二叉樹止一個(gè)直接前驅(qū)或后繼(樹,圖等)數(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.第六章 樹和二叉樹§6.1樹的定義樹是n個(gè)數(shù)據(jù)元Ev素al的ua有ti限on集o(n記l記y.為T),對ate任dw意it一h棵As樹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)本身又是一棵樹,并稱樹Ti是根的子樹.第六章 樹和二叉樹B
CD2.
嵌套集合表示法ACBD樹的表示法1.
分支圖表示法EvaluatiAon
only.3.廣義表表示法(A(B(D),C))ated
with
Aspose.Slides
for
.NET
3.5
Client
ProfiCopyright
2004-2011
Aspose
Pty
Ltd.第六章 樹和二叉樹樹的基本術(shù)語樹的結(jié)點(diǎn):包含一個(gè)DE和指向其子樹的所有分支;結(jié)點(diǎn)的度:一個(gè)結(jié)點(diǎn)擁有的子樹的個(gè)數(shù),度為零的結(jié)點(diǎn)稱為葉結(jié)點(diǎn);
Evaluation
only.ate3d.w樹it的h
度As:p樹os中e.所S有l(wèi)i結(jié)de點(diǎn)s
的fo度r
的.N最ET大3值.5MaCaxl(iDe(nIt))Profi含義:C樹op中yr最i大gh分t
支2支0數(shù)04為-2樹01的1度As;pose
Pty
Ltd.4.
結(jié)點(diǎn)的層次及樹的深度:根為第一層,根的孩子為第二層,若某結(jié)點(diǎn)為第k層,則其孩子為k+1層.樹中結(jié)點(diǎn)的最大層次稱為樹的深度或高度
5.森林:是m(m>=0)棵互不相的樹的集合森林與樹概念相近,相互很容易轉(zhuǎn)換.第六章 樹和二叉樹§6.2 樹的基本運(yùn)算⒈ 初始化操作INITEIvAaTlEu(aTt)i:o創(chuàng)no建nl一y棵.空樹。ated⒉wit求h根As函po數(shù)sReRO.OSTl(iTd)e:s求fo樹rT.的NE根T;3.R5OOCTl(iXe)n:t求Profi結(jié)點(diǎn)x所在Co樹py的ri根g。ht2004-2011AsposePtyLtd.⒊ 求雙親函數(shù)PARENT(T,x):在樹T中求x的雙親。⒋ 求第i個(gè)孩子函數(shù)CHILD(T,x,i):在樹T中求結(jié)點(diǎn)x的第i個(gè)孩子。⒌ 求兄弟函數(shù):在T中求x的左兄弟LSIBLING(T,x);在樹T中求x的右兄弟RSIBLING(T,x)。第六章 樹和二叉樹第i根子樹。⒏ 刪除子樹操作DEL-CHILD(x,i):刪除x的第i棵子樹。⒐ 遍歷樹操作TRAVERSE(T):按順序訪問樹T中各個(gè)結(jié)點(diǎn)。⒑ 置空樹操作CLEAR(T):將樹T置為空樹。⒍ 建樹函數(shù)CRT-TREE(x,F):建立以結(jié)點(diǎn)x為根,森林F為子樹的樹。Evaluationonly.ated⒎wit插h入As子po樹se操.作SlIiNdSe-sCHfIoLrD(.yN,EiT,x3).:5將Clxi作en為tyP的rofiCopyright
2004-2011
Aspose
Pty
Ltd.第六章 樹和二叉樹§6.3 二叉樹概念及性質(zhì)一. 二叉樹概念 Evaluationonly.atedwit二hA叉sp樹os是e.結(jié)Sl點(diǎn)id數(shù)es為fo0r或.每NE個(gè)T3結(jié).5點(diǎn)Cl最ie多nt只P有rofi左右兩棵Co子py樹ri的gh樹t2。00二4-叉20樹11是A一s一po種se特P殊ty的Lt樹d.,它的特點(diǎn)是:⑴每個(gè)結(jié)點(diǎn)最多只有兩棵子樹,即不存結(jié)點(diǎn)度大于2的結(jié)點(diǎn);⑵子樹有左右之分,不能顛倒。6.3
二叉樹二. 二叉樹性質(zhì)性質(zhì)1. 在二叉樹的第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樹sf至o多r多.有NE2Tk-31.個(gè)5結(jié)Cl點(diǎn)ie(nkt≥P)r。ofi(深度一C定o,py二ri叉gh樹t的20最04大-2結(jié)0點(diǎn)11數(shù)A也sp確os定e)PtyLtd.性質(zhì)3. 二叉樹中,終端結(jié)點(diǎn)數(shù)n0與度為2的結(jié)點(diǎn)數(shù)n2有如下關(guān)系: n0=n2+16.3
二叉樹12374K=3n=23-1=75
6滿二叉樹滿二叉樹:深度為k,且有2k-1個(gè)結(jié)點(diǎn)的二叉樹。特點(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號.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對t二20叉04樹-2的0結(jié)1結(jié)1點(diǎn)As進(jìn)p行os連e續(xù)P續(xù)t編yL號t。d.6.3
二叉樹45完全二叉樹:深度為k,結(jié)點(diǎn)數(shù)為n的二叉樹,當(dāng)且僅當(dāng)每個(gè)結(jié)點(diǎn)的編Ev號al都ua與t相io同no深n度ly的.滿二叉樹ated中wi從th1到Asnp的os結(jié)e點(diǎn).S一li一de對s應(yīng)fo時(shí)r,.N稱ET為3完.5全C二li叉en樹t。ProfiCopyright2004-2011AsposePtyLtd.12 36.3
二叉樹45完全二叉樹的特點(diǎn):每個(gè)結(jié)點(diǎn)i的左子樹的深度Lhi-其結(jié)點(diǎn)i的右子樹的深度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樹gh結(jié)t點(diǎn)20數(shù)04n-滿20足121k-A1s-p1<o(jì)<sne≤P2tky-1Ltd.滿二叉樹一定是完全二叉樹,反之不成立。12 36.3
二叉樹2LH
=03265411LH
=3RH
=11LH
-RH1=21Evaluation
only.ateRdHw2=i1th
As2pose.3Slides
for
.NET
3.5
Cli1ent
ProfiCopyright
2004-42011
A非完全二叉樹非完全二叉樹LH2-RH2=0-1=-1spose
Pty
Ltd.6.3
二叉樹性質(zhì)4. 結(jié)點(diǎn)數(shù)為n的完全二叉樹,其深度為log2n┘+ 1Evaluationonly.└ated
with
Aspose.Slides
for
.NET
3.5
Client
ProfiCopyright
2004-2011
Aspose
Pty
Ltd.6.3
二叉樹性質(zhì)5. 在按層序編號的n個(gè)結(jié)點(diǎn)的完全二叉樹中,任意一結(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無左孩子,為葉結(jié)點(diǎn);否則,結(jié)點(diǎn)i的左孩子為結(jié)點(diǎn)2i。⑶ 2i+1>n時(shí),結(jié)點(diǎn)i無右孩子;否則,結(jié)點(diǎn)i的右孩子為結(jié)點(diǎn)2i+1。ated⑴witih=1A時(shí)sp,os結(jié)e點(diǎn).Sil是id樹es的f根or;.否NE則T(3i.>51)C,li結(jié)en點(diǎn)tiP的rofiCopyright
2004-2011
Aspose
Pty
Ltd.6.3
二叉樹完全二叉樹DCGFEBA三、二叉樹的存儲結(jié)構(gòu)⒈ 順序存儲結(jié)構(gòu)用一組地址連續(xù)的存儲單元,以層序順序存放二叉樹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)的相對Ev位a置lu蘊(yùn)a含t含i著on結(jié)o點(diǎn)n之ly間.的關(guān)系。atedwithAspose.Slidesfor.NET3.5ClientProfiCopyright2004-12201314A5s6p7o8se91P01t1yLtd.6.3
二叉樹這種存儲結(jié)構(gòu)適合于完全二叉樹,既不浪費(fèi)存儲空間,又能很快確定結(jié)點(diǎn)的存放位置、以及結(jié)點(diǎn)的雙親和左右孩子的存放位置,但對一般二叉樹,可能造成存儲空間的浪費(fèi)。D二叉樹FB
CAA
B
C
D
E
0
0
0
0
F
G
0
0
0
0Ev1a2lu3a4ti5
o6
n7
o8
n9l10y1.1一般二叉樹也按完全二叉樹形式存儲,沒結(jié)點(diǎn)處用0表示。ated
with
Aspose.Slides
for
.NET
3.5
Client
ProfiCEopyright
2004-2011
Aspose
Pty
Ltd.G6.3
二叉樹例如,深度為k,且只有k個(gè)結(jié)點(diǎn)的右單枝樹(每個(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
二叉樹⒉ 鏈?zhǔn)酱鎯Y(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儲w結(jié)it構(gòu)h。As常po用se的.有Sl:idesfor.NET3.5ClientProfi二叉鏈C表opyright2004-2011AsposePtyLtd.三叉鏈表線索鏈表 用空鏈域存放指向前驅(qū)或后繼的線索6.3
二叉樹D二叉樹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
二叉樹三叉鏈表的結(jié)點(diǎn)結(jié)構(gòu)lchild
data
parent
rchildD二叉樹CEBAACBDE∧∧
∧∧∧∧∧三叉鏈表Evaluation
only.ated
with
Aspose.Slides
for
.NET
3.5
Client
ProfiCopyright
2004-2011
Aspose
Pty
Ltd.6.3
二叉樹性質(zhì)6. 含有n個(gè)結(jié)點(diǎn)的二叉鏈表中,有n+1個(gè)空鏈域。Evaluationonly.atedwithAspose.Slidesfor.NET3.5ClientProfiCopyright2004-2011AsposePtyLtd.6.4
遍歷二叉樹和線索二叉樹一、遍歷二叉樹遍歷二叉樹是指按一定的規(guī)律對二叉樹的每個(gè)結(jié)點(diǎn),訪問且僅訪問一次的處理過程。訪問是一種抽象操作Ev,al是ua對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.一次遍歷后,使樹中結(jié)點(diǎn)的非線性排列,按訪問的先后順序變?yōu)槟撤N線性排列。遍歷的次序:若設(shè)二叉樹根為D,左子樹為L,右子樹為R,并限定先左后右,則有以下三種遍歷次序:LDR 中序遍歷;LRD 后序遍歷;DLR 先序遍歷6.4
遍歷二叉樹和線索二叉樹1.中序遍歷二叉樹算法思想:若二叉樹非空,則:訪問根結(jié)點(diǎn)中序遍歷右子樹算法描述: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樹ht
20I0F4-b2t0<1>N1IALsTpHoEsNe
Pty
Ltd.6.4
遍歷二叉樹和線索二叉樹2.后序遍歷二叉樹算法思想:后序遍歷右子樹訪問根結(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樹A非sp空os,e.則S:l:idePsROfCopro.sNtoErTde3r.5(bCtl:ibeinttrePprtorf)i;1)后序遍C歷op左yr子ig樹ht
2{0b0t4為-2B0T1根1結(jié)As點(diǎn)p指os針e
}Pty
Ltd.6.4
遍歷二叉樹和線索二叉樹3.先序遍歷二叉樹算法思想:2)
先序遍歷左子樹3)先序遍歷右子樹IFbt<>NILTHEN[visit(bt↑.data);preorder(bt↑.lchild);preorder(bt↑.rchild);]ENDP;{preorder}Ev算al法ua描ti述o:n
only.ate若d二wi叉th樹A非sp空os,e.則S:l:idePsROfCoprr.eNoErdTe3r.(5btC:libeinttrePprtorf)i1)訪問根C結(jié)op點(diǎn)yright
2{0b0t4為-2B0T1根1結(jié)As點(diǎn)po指s針e針P}ty
Ltd.6.4
遍歷二叉樹和線索二叉樹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
遍歷二叉樹和線索二叉樹三種遍歷過程示意圖例acb×—b-ba
a-—aba
b虛線表示執(zhí)行過程:向下表示更深層的遞歸調(diào)用;向上表示遞歸調(diào)用返回;沿虛線記下各類符號,便得到遍歷的結(jié)果.Evaluation
only-.ated
with
Aspose.Slide*s
for
.×NET
3*.5cClienct
ProfciCopyright
2004-20*11
Aspose
PtycLtd.6.4 遍歷二叉樹和線索二叉樹PROC
inorder(bt:bitreptr);{中序遍歷非遞歸算法,s為存儲二叉樹結(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)緊跟根后面一次和出一次棧,并且總是訪問棧頂元素,因此,算法正確,時(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
遍歷二叉樹和線索二叉樹二、線索二叉樹⒈ 問題的提出:通Ev過al遍ua歷ti二on叉o樹n樹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樹1A上sp只os能e找Pt到y(tǒng)L結(jié)td點(diǎn).的左孩子、右孩子,結(jié)點(diǎn)的前驅(qū)和后繼只有在遍歷過程中才能得到,那么,能否通過結(jié)點(diǎn)的兩個(gè)鏈域查找出任一結(jié)點(diǎn)的前驅(qū)和后繼?6.4
遍歷二叉樹和線索二叉樹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è)指針域;因此, 必須用空鏈域來存放結(jié)點(diǎn)的前驅(qū)和后繼。線索二叉樹就是利用n+1個(gè)空鏈域來存放結(jié)點(diǎn)的前驅(qū)和后繼結(jié)點(diǎn)的信息。6.4 遍歷二叉樹和線索二叉樹lchild
ltag
data
rtag
rchild3. 線索二叉樹:⑴ 結(jié)點(diǎn)結(jié)構(gòu)在二叉鏈表中增加 ltag 和 rtag 兩個(gè)標(biāo)志域Evaluationonly.若結(jié)點(diǎn)有左子樹,則左鏈域lchild指示其左孩子(ltag=0);否則,令左鏈域指示其前驅(qū)(ltag=1);若結(jié)點(diǎn)有右子樹,則右鏈域rchild指示其右孩子(rtag=0);否則,令右鏈域指示其后繼(rtag=1);ated
with
Aspose.Slides
for
.NET
3.5
Client
ProfiCopyright
2004-2011
Aspose
Pty
Ltd.6.4 遍歷二叉樹和線索二叉樹的過程稱為線索化。按中序遍歷得到的線索二叉樹稱為中序線索二叉樹;按先序遍歷得到的線索二叉樹稱為先序線索二叉樹;按后序遍歷得到的線索二叉樹稱為后序線索二叉樹;稱這種結(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樹id稱e為s為f線or索.二NE叉T樹3.;5
Client
Profi對二叉C樹o以p以y某ri種gh次t序20遍04歷-2使0其11變A為s為p線os索e
二Pt叉y
樹L樹td.6.4 遍歷二叉樹和線索二叉樹acb×—0
-
01
c
10
×
01
b
11
a
1(2)整體結(jié)構(gòu)增設(shè)一個(gè)頭結(jié)點(diǎn),令其lchild指向二叉樹的根結(jié)點(diǎn),ltag=0、rtag=1;并將該結(jié)點(diǎn)作為遍Ev歷a訪lu問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 遍歷二叉樹和線索二叉樹4. 遍歷線索二叉樹:有了線索二叉樹,就容易遍歷二叉樹了.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).所有問題歸為如何在線索二叉樹中找結(jié)點(diǎn)的后繼?6.4 遍歷二叉樹和線索二叉樹1)遍歷中序線索二叉樹(1)中序線索二叉樹Ev中al,ua找t結(jié)io點(diǎn)n的on后ly繼.算法ated算w法it思h想As:po對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)從右孩子開始,沿左指針前進(jìn),直到找到?jīng)]有左孩子的結(jié)點(diǎn)s(ltag=1),則s就是p的后繼,即后繼是中序遍歷右子樹時(shí),訪問的第一個(gè)結(jié)點(diǎn);6.4 遍歷二叉樹和線索二叉樹中序線索二叉樹中,找結(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樹E上T
,3查.5找C指l針iep所nt指Profi010sCopyright
2004-2011
Aspose
Pty
Ltd.6.4 遍歷二叉樹和線索二叉樹(2)遍歷中序線索二叉樹算法PROC
thrt_inorder(thrt:thlinktp);{遍歷以thrt為頭指針的中序線索二叉樹}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 遍歷二叉樹和線索二叉樹2)遍歷后序線索二叉樹(1)后序線索二叉樹中,找結(jié)點(diǎn)的后繼算法若p是雙親的右孩子、或是獨(dú)生左孩子,則后繼為雙親;若p是有兄弟的左孩子,則后繼為雙親的右子樹上按后序遍歷時(shí),訪問的第一個(gè)結(jié)點(diǎn)(葉結(jié)點(diǎn));spspssEvaluation
onlpy.ated算w法it思h想As:po對se任.意Sl結(jié)id點(diǎn)esp,for.NET3.5ClientProfi若p為二Co叉py樹r的ig根ht,2則00無4-后20繼1;1;AsposePtyLtd.6.4 遍歷二叉樹和線索二叉樹后序線索二叉樹中,找結(jié)點(diǎn)的后繼算法FUNC post_next(p,thrt:thlinktp):thlinktp;{在以thrt為頭指針的后序線索二叉樹上,查找指針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 遍歷二叉樹和線索二叉樹(2)遍歷后序線索二叉樹算法PROC
thrt_postorder(thrt:thlinktp);{遍歷以thrt為頭指針的后序線索二叉樹}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 遍歷二叉樹和線索二叉樹3)遍歷先序線索二叉樹先序線索二叉E樹va中l(wèi)u,at找i結(jié)on點(diǎn)o的nl后y.繼算法ated算wi法th思A想sp:os對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無左孩子,有右孩子,則后繼為右孩子;若p無左孩子,也無右孩子,則后繼為右線索;6.4 遍歷二叉樹和線索二叉樹先序線索二叉樹中,找結(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樹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 遍歷二叉樹和線索二叉樹(2)遍歷先序線索二叉樹算法PROC
thrt_preorderE(vtahlruta:tthiloinnkotnpl)y;.ated{w遍i歷t歷h以Atshprto為se頭.指Sl針i的d的e先s序fo線r索.二NE叉T樹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樹和森林一.樹的存儲結(jié)構(gòu)1.雙親表示法432651123456data
parent011222用一組地址連續(xù)的存儲單元來存放樹的結(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
樹和森林2.孩子表示法每個(gè)結(jié)點(diǎn)的孩子用單鏈表存儲,稱為孩子鏈表。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
樹和森林3.雙親孩子表示法.在孩子表示法的頭指針向量中,增加一項(xiàng),用來如圖: 頭指針向量 孩子鏈表01122212345663524∧∧∧∧∧∧表示該結(jié)點(diǎn)的雙親。Evaluation
only.ated
with
Aspose.Slides
for
.NET
3.5
Client
ProfiCopyright
2004-2011
Aspose
Pty
Ltd.6.5
樹和森林4.孩子兄弟表示法.用二叉鏈表作為樹的存儲結(jié)構(gòu),每個(gè)結(jié)點(diǎn)的左鏈域指向該結(jié)點(diǎn)的第一個(gè)孩子,右鏈域指向下一個(gè)兄弟結(jié)點(diǎn)。如圖:∧∧∧∧123456∧∧∧雙親只管長子長子連接兄弟Evaluation
only.ated
with
Aspose.Slides
for
.NET
3.5
Client
ProfiCopyright
2004-2011
Aspose
Pty
Ltd.6.5
樹和森林二、森林、樹與二叉樹的對應(yīng)關(guān)系Evaluationonly.atedw1it、h樹As與po二s叉e.樹Sl的id對es應(yīng)f關(guān)or系.NET3.5ClientProfi樹C與op二y叉ri樹gh均t可20用04二-2叉0鏈11表As作p為os存eP儲t結(jié)yL構(gòu)t,d.因此給定一棵樹,用二叉鏈表存儲,可唯一對應(yīng)一棵二叉樹,反之亦然。AB
C
E∧
BC∧∧
E∧A∧∧
DDECbA∧
BC∧
∧∧
D
∧
E樹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.解釋:B是A的第一個(gè)孩子,C.E是B的兄弟,D是C的第一個(gè)孩子。解釋:B是A的左孩子,C是B的右孩子。6.5
樹和森林樹變?yōu)槎鏄涞姆椒ǎǎ保┰谛值苤g加一連線;(2)對每一個(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í)針旋轉(zhuǎn)45度。特點(diǎn):根無右子樹6.5
樹和森林2.森林與二叉樹的對應(yīng)關(guān)系森林轉(zhuǎn)換為二叉E樹va的lu方at法iononly.ate?d將wi森th林AsFp=o{sTe1,.TS2l.i.d.eTsm}f的o各r.棵NE樹T分3.別5轉(zhuǎn)Cl成ie二n叉tP樹rofiBT1,BT2..C.oBpTymright2004-2011AsposePtyLtd.將BTi+1作為BTi根結(jié)點(diǎn)的右子樹(i=1,2,...,m-1),得到一棵BT。6.5
樹和森林如圖: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
樹和森林JIHGFBCDA1BCDAFE
ET23JIHG(2)二叉樹轉(zhuǎn)換森林的方法將當(dāng)前根結(jié)點(diǎn)和其左子樹作為森林的一棵樹,并將其右子樹作為森林的其他子樹;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樹E為T為3空.5。Client
ProfiCopyrightT2004-2011
Aspose
TPty
Ltd.6.6
哈夫曼樹及其應(yīng)用哈夫曼樹(Huffman)樹是一類帶權(quán)路徑長度最短的樹一、Huffman樹(最優(yōu)二叉樹)1.概念2763415例⑴-⑵-⑸為結(jié)點(diǎn)1到5之間的路徑,其路長度為2,樹的路徑長度=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過li的e結(jié)n結(jié)t點(diǎn)P序ro列fi路徑長C度o:py路r徑ig上h的t分20支0樹4樹-2011AsposePtyLtd.樹的路徑長度:從根到每一結(jié)點(diǎn)的路徑長度之和6.6
哈夫曼樹及其應(yīng)用長度為樹中所有葉結(jié)點(diǎn)的權(quán)值與路徑長度的乘積的總和。完全二叉樹是路徑長度最短的二叉樹。考慮帶權(quán)時(shí):E設(shè)v樹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長tProfi度為LiC(oipy=r1i,g2h,t2.0.04-m2)0,11則A樹sp的os帶e權(quán)Pt路y徑Ltd.M即:WPL=∑WkLkK=16.6
哈夫曼樹及其應(yīng)用例:使WPL最小的二叉樹成為最優(yōu)二叉樹(Huffman樹)dca7b5
2
4d4a7b5WPLa=2*7+2*5+2*2+2*4=36WPLb=7*3+5*3+2*1+4*2=46完全二E叉va樹luation
only.ated
with
Aspose.Slides
for
.NET
3.5
Clicent
ProfiCopyright
2004-2011
Aspose
P2ty
Ltd.6.6
哈夫曼樹及其應(yīng)用Huffman樹WPLc=7*1+5*2+2*3+4*3=35ba5c2d4不一定是Huffman樹;的越靠近根結(jié)點(diǎn);(3)HT不唯一,但WPL一定相等。Evaluation
only.ated
with
A7spose.Slides
for
.NE(T1)3.完5全Cl二i叉en樹t并ProfiCopyright
2004-2011(A2s)pHoTs是e權(quán)Pt值y越L大td.6.6
哈夫曼樹及其應(yīng)用2.構(gòu)造Huffman樹算法(1)以權(quán)值分別為W1,W2...Wn的n各結(jié)點(diǎn),構(gòu)成n棵二叉樹T1,T2,...Tn并組E成v森al林uFa=t{iTo1,nT2o,.nl.y..Tn},其中每棵(2)在F中選取兩棵根結(jié)點(diǎn)權(quán)值最小的樹作為左右子樹構(gòu)造(4)重復(fù)(2).(3)直到F中只含一棵二叉樹為止,這棵二叉樹就是Huffman樹。ated二wi叉t樹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樹py,r并i并g且ht置2新0二04叉-樹20根1結(jié)1點(diǎn)As權(quán)po值s為e左Pt右y子L樹
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒園2022秋季中班級工作計(jì)劃
- 初中學(xué)習(xí)計(jì)劃
- 多功能整粒機(jī)行業(yè)行業(yè)發(fā)展趨勢及投資戰(zhàn)略研究分析報(bào)告
- 中國姜黃行業(yè)市場發(fā)展現(xiàn)狀及投資前景展望報(bào)告
- 2024-2027年中國國資云行業(yè)市場深度分析及投資戰(zhàn)略規(guī)劃報(bào)告
- 客服的個(gè)人工作計(jì)劃
- 減災(zāi)工作計(jì)劃匯編10篇
- 財(cái)務(wù)工作年度工作計(jì)劃
- 重癥實(shí)習(xí)報(bào)告600字5篇
- 生產(chǎn)部述職報(bào)告怎么寫5篇
- 2024過敏性休克搶救指南(2024)課件干貨分享
- 【發(fā)動(dòng)機(jī)曲軸數(shù)控加工工藝過程卡片的設(shè)計(jì)7800字(論文)】
- 2024年貴州貴陽市貴安新區(qū)產(chǎn)業(yè)發(fā)展控股集團(tuán)有限公司招聘筆試參考題庫含答案解析
- 汕頭市中小學(xué)教學(xué)研究中心招聘專職教研員考試試題及答案
- 數(shù)字孿生應(yīng)用技術(shù)基礎(chǔ)知識考試題庫(600題)
- 美國RAZ分級讀物目錄整理
- 地方課程六年級上冊
- 中科院大連化物所模板PPT課件
- YOX液力偶合器使用說明書
- 優(yōu)秀團(tuán)支部申報(bào)表
評論
0/150
提交評論