中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

數(shu)據(ju)結(jie)構~二(er)叉樹(shu)

返回目錄

二叉樹也是定義的,二叉樹是線性結構,其結點有(you)左右子(zi)(zi)樹(shu)(shu)(shu)之(zhi)分,邏輯上二(er)(er)(er)叉(cha)(cha)(cha)樹(shu)(shu)(shu)有(you)五種基本形態: (1)空二(er)(er)(er)叉(cha)(cha)(cha)樹(shu)(shu)(shu)——(a); (2)只有(you)一個根結點的(de)二(er)(er)(er)叉(cha)(cha)(cha)樹(shu)(shu)(shu)——(b); (3)右子(zi)(zi)樹(shu)(shu)(shu)為(wei)空的(de)二(er)(er)(er)叉(cha)(cha)(cha)樹(shu)(shu)(shu)——(c); (4)左子(zi)(zi)樹(shu)(shu)(shu)為(wei)空的(de)二(er)(er)(er)叉(cha)(cha)(cha)樹(shu)(shu)(shu)——(d); (5)完全(quan)二(er)(er)(er)叉(cha)(cha)(cha)樹(shu)(shu)(shu)——(e)注(zhu)意:盡管二(er)(er)(er)叉(cha)(cha)(cha)樹(shu)(shu)(shu)與樹(shu)(shu)(shu)有(you)許多相似之(zhi)處,但二(er)(er)(er)叉(cha)(cha)(cha)樹(shu)(shu)(shu)不是樹(shu)(shu)(shu)的(de)特殊情形。

簡介

二(er)叉(cha)(cha)樹(shu)在中(zhong)是(shi)這(zhe)樣(yang)(yang)定義的(de):二(er)叉(cha)(cha)樹(shu)是(shi)一個(ge)連通的(de)無環圖,并且每一個(ge)頂(ding)點(dian)(dian)的(de)度(du)不大(da)于2。有(you)(you)根(gen)二(er)叉(cha)(cha)樹(shu)還要滿足根(gen)結(jie)(jie)點(dian)(dian)的(de)度(du)不大(da)于2。有(you)(you)了根(gen)結(jie)(jie)點(dian)(dian)之后(hou),每個(ge)頂(ding)點(dian)(dian)定義了唯一的(de)父結(jie)(jie)點(dian)(dian),和最多(duo)2個(ge)子(zi)結(jie)(jie)點(dian)(dian)。然而,沒有(you)(you)足夠的(de)信息(xi)來區(qu)分左(zuo)結(jie)(jie)點(dian)(dian)和右(you)結(jie)(jie)點(dian)(dian)。如(ru)果不考(kao)慮,允許圖中(zhong)有(you)(you)多(duo)個(ge),這(zhe)樣(yang)(yang)的(de)結(jie)(jie)構叫做森(sen)林。

在計算機科學中,二叉樹是每個結點最多有兩個子樹的有序樹。通常子樹的根被稱作“左子樹”(left subtree)和“右子樹”(right subtree)。二叉樹常被用作和二叉堆。二叉樹的每個結點至多只有二棵子樹(不存在度大于2的結點),二叉樹的子樹有左右之分,次序不能顛倒。二叉樹的第i層至多有2的 i 次方個結點;深度為k的二叉樹至多有2^(k) -1個結點;對任何一棵二叉樹T,如果其終端結點數(即葉子結點數)為n0,度為2的結點數為n2,則n0 = n2 + 1。

樹和二叉樹的2個主要差別:

1. 樹中(zhong)結(jie)點(dian)的最(zui)大(da)度數沒有限制,而(er)二(er)叉樹結(jie)點(dian)的最(zui)大(da)度數為2;

2. 樹的(de)結(jie)(jie)點無左、右(you)之分,而二叉樹的(de)結(jie)(jie)點有左、右(you)之分。……

樹(shu)(shu)是(shi)一種(zhong)重要的(de)(de)(de)非線(xian)性(xing),直觀(guan)地看,它是(shi)數據(ju)元素(在(zai)(zai)樹(shu)(shu)中(zhong)稱(cheng)為結(jie)點)按分支關(guan)系組(zu)(zu)織起來的(de)(de)(de)結(jie)構(gou),很象(xiang)自然界(jie)中(zhong)的(de)(de)(de)樹(shu)(shu)那(nei)樣(yang)。在(zai)(zai)客觀(guan)世界(jie)中(zhong)廣泛(fan)存在(zai)(zai),如人(ren)類社(she)會的(de)(de)(de)族(zu)譜和各種(zhong)社(she)會組(zu)(zu)織機(ji)構(gou)都(dou)可(ke)用(yong)(yong)樹(shu)(shu)形(xing)象(xiang)表(biao)(biao)示(shi)。樹(shu)(shu)在(zai)(zai)計算機(ji)領域中(zhong)也(ye)得到廣泛(fan)應用(yong)(yong),如在(zai)(zai)編譯源程序(xu)時,可(ke)用(yong)(yong)樹(shu)(shu)表(biao)(biao)示(shi)源程序(xu)的(de)(de)(de)語(yu)法結(jie)構(gou)。又如在(zai)(zai)中(zhong),樹(shu)(shu)型結(jie)構(gou)也(ye)是(shi)信息的(de)(de)(de)重要組(zu)(zu)織形(xing)式之(zhi)一。一切具有(you)層(ceng)次關(guan)系的(de)(de)(de)問題都(dou)可(ke)用(yong)(yong)樹(shu)(shu)來描述(shu)。

樹的概述

樹結構(gou)的特點是:它的每一(yi)個(ge)結點都可以(yi)(yi)有不(bu)止一(yi)個(ge)直接(jie)后繼,除根結點外的所有結點都有且只有一(yi)個(ge)直接(jie)前驅。以(yi)(yi)下(xia)具體(ti)地給出樹的定義及樹的數(shu)據結構(gou)表(biao)示。

圖示

樹的定義

樹是由一(yi)個或多個結點組成(cheng)的有限集合(he),其中:

⒈必(bi)有一個特定的(de)(de)稱(cheng)為根(ROOT)的(de)(de)結(jie)點(dian);

⒉剩(sheng)下(xia)的結(jie)點被分(fen)成n>=0個互不相交的集(ji)合T1、T2、......Tn,而且, 這些集(ji)合的每(mei)一個又都是樹(shu)。樹(shu)T1、T2、......Tn被稱作根的子樹(shu)(Subtree)。

樹的(de)定義如下:(1)至少有一個(ge)結點(稱(cheng)為根)(2)其它是互不相(xiang)交的(de)子樹

1.樹的(de)(de)度(du)(du)——也即是寬度(du)(du),簡單地(di)說,就是結(jie)(jie)點(dian)(dian)的(de)(de)分(fen)支數(shu)。以組成該樹各結(jie)(jie)點(dian)(dian)中最大的(de)(de)度(du)(du)作為(wei)(wei)該樹的(de)(de)度(du)(du),如上圖的(de)(de)樹,其(qi)度(du)(du)為(wei)(wei)3;樹中度(du)(du)為(wei)(wei)零(ling)的(de)(de)結(jie)(jie)點(dian)(dian)稱(cheng)(cheng)為(wei)(wei)葉結(jie)(jie)點(dian)(dian)或終(zhong)端(duan)結(jie)(jie)點(dian)(dian)。樹中度(du)(du)不為(wei)(wei)零(ling)的(de)(de)結(jie)(jie)點(dian)(dian)稱(cheng)(cheng)為(wei)(wei)分(fen)枝結(jie)(jie)點(dian)(dian)或非終(zhong)端(duan)結(jie)(jie)點(dian)(dian)。除根(gen)結(jie)(jie)點(dian)(dian)外的(de)(de)分(fen)枝結(jie)(jie)點(dian)(dian)統稱(cheng)(cheng)為(wei)(wei)內部結(jie)(jie)點(dian)(dian)。

2.樹的(de)深(shen)度(du)——組成(cheng)該樹各結(jie)點的(de)最大層次,如上圖,其深(shen)度(du)為3;

3.森林——指若(ruo)干棵(ke)互(hu)不相交的(de)樹的(de)集(ji)合,如(ru)上(shang)圖(tu),去(qu)掉根結點A,其原來的(de)二(er)棵(ke)子(zi)樹T1、T2、T3的(de)集(ji)合{T1,T2,T3}就為森林;

4.有(you)序樹(shu)(shu)——指樹(shu)(shu)中同層結點(dian)從(cong)左到右有(you)次序排列(lie),它們之間的次序不能互(hu)換(huan),這樣的樹(shu)(shu)稱為有(you)序樹(shu)(shu),否則稱為無序樹(shu)(shu)。

樹的表示

樹的表示方(fang)法(fa)有許(xu)多,常用(yong)(yong)的方(fang)法(fa)是用(yong)(yong)括號(hao):先(xian)將根(gen)結(jie)點(dian)放入一對圓括號(hao)中(zhong),然后把(ba)它(ta)的子(zi)(zi)樹由(you)左至右(you)的順序放入括號(hao)中(zhong),而對子(zi)(zi)樹也采用(yong)(yong)同樣的方(fang)法(fa)處理;同層(ceng)子(zi)(zi)樹與它(ta)的根(gen)結(jie)點(dian)用(yong)(yong)圓括號(hao)括起(qi)來(lai)(lai),同層(ceng)子(zi)(zi)樹之間用(yong)(yong)逗號(hao)隔開,最(zui)后用(yong)(yong)閉括號(hao)括起(qi)來(lai)(lai)。如上圖可寫(xie)成如下形式:

(A(B(E(K,L),F),C(G),D(H(M),I,J)))

二叉樹

1.二叉樹的基本形態

二叉樹也是遞歸定(ding)義的,其(qi)結(jie)點有(you)左右子樹之分(fen),邏(luo)輯(ji)上二叉樹有(you)五種基本形態:

(1)空二叉樹——(a);

(2)只有一(yi)個根結點的二(er)叉樹——(b);

(3)只有左子樹(shu)——(c);

(4)只有右子樹——(d);

(5)——(e)

注(zhu)意:盡(jin)管(guan)二叉樹與樹有許(xu)多相似(si)之(zhi)處,但二叉樹不(bu)是(shi)樹的特殊情形(xing)。

2.兩個重要的概念

(1)完(wan)全二(er)叉樹(shu)——若設(she)二(er)叉樹(shu)的(de)(de)高度為h,除第 h 層(ceng)(ceng)外(wai),其它各層(ceng)(ceng) (1~h-1) 的(de)(de)結點數都達到最大個數,第 h 層(ceng)(ceng)有葉子節點,這就是完(wan)全二(er)叉樹(shu)。

(2)——除(chu)了葉結(jie)點(dian)外(wai)每一個(ge)結(jie)點(dian)都有左(zuo)右子(zi)葉且(qie)葉結(jie)點(dian)都處在最(zui)底層的(de)二叉樹(shu),。

3.二叉樹的性質

(1) 在二叉樹中,第i層(ceng)的結點總數不(bu)超過2^(i-1);

(2) 深度為h的二(er)叉樹最多有(2^h)-1個結點(dian)(h>=1),最少有h個結點(dian);

(3) 對于任(ren)意(yi)一棵二叉(cha)樹,如果(guo)其葉結點數(shu)為N0,而度數(shu)為2的結點總數(shu)為N2,

則N0=N2+1;

(4) 具有n個結點(dian)的(de)完全二叉樹(shu)的(de)深(shen)度為int(log2n)+1

(5)有N個(ge)結(jie)點(dian)的完全二叉(cha)樹各結(jie)點(dian)如果(guo)用順序方(fang)式(shi)存(cun)儲,則結(jie)點(dian)之間有如下(xia)關系:

若(ruo)I為(wei)(wei)結點(dian)編號則 如果I<>1,則其(qi)父(fu)結點(dian)的編號為(wei)(wei)I/2;

如(ru)果2*I<=N,則其左(zuo)兒(er)子(zi)(即左(zuo)子(zi)樹(shu)的根結(jie)點)的編(bian)號為(wei)2*I;若2*I>N,則無左(zuo)兒(er)子(zi);

如果2*I+1<=N,則其右兒子的結點編號(hao)為2*I+1;若2*I+1>N,則無(wu)右兒子。

(6)給定(ding)N個節(jie)點,能構成h(N)種不同(tong)的(de)二叉樹。

h(N)為的第N項。h(n)=C(n,2*n)/(n+1)。

4.二叉樹的存儲結構

(1)順序存儲方式

type node=record

data:datatype

l,r:integer;

end;

var tr:array[1..n] of node;

(2)存儲方式(shi),如:

type btree=^node;

node=record

data:datatye;

lchild,rchild:btree;

end;

5.普通樹轉換成二叉樹

二叉樹(shu)(shu)很象一株(zhu)倒(dao)懸著的(de)(de)(de)樹(shu)(shu),從樹(shu)(shu)根到大(da)分(fen)枝(zhi)、小分(fen)枝(zhi)、直到葉(xie)子(zi)(zi)(zi)把數據聯系(xi)起(qi)來,這種(zhong)數據結(jie)(jie)(jie)(jie)構就(jiu)叫做樹(shu)(shu)結(jie)(jie)(jie)(jie)構,簡稱(cheng)(cheng)(cheng)樹(shu)(shu)。樹(shu)(shu)中(zhong)每個(ge)分(fen)叉點(dian)(dian)(dian)(dian)(dian)稱(cheng)(cheng)(cheng)為結(jie)(jie)(jie)(jie)點(dian)(dian)(dian)(dian)(dian),起(qi)始結(jie)(jie)(jie)(jie)點(dian)(dian)(dian)(dian)(dian)稱(cheng)(cheng)(cheng)為樹(shu)(shu)根,任意兩個(ge)結(jie)(jie)(jie)(jie)點(dian)(dian)(dian)(dian)(dian)間的(de)(de)(de)連接(jie)關(guan)系(xi)稱(cheng)(cheng)(cheng)為樹(shu)(shu)枝(zhi),結(jie)(jie)(jie)(jie)點(dian)(dian)(dian)(dian)(dian)下(xia)面(mian)不再(zai)有分(fen)枝(zhi)稱(cheng)(cheng)(cheng)為樹(shu)(shu)葉(xie)。結(jie)(jie)(jie)(jie)點(dian)(dian)(dian)(dian)(dian)的(de)(de)(de)前趨(qu)(qu)結(jie)(jie)(jie)(jie)點(dian)(dian)(dian)(dian)(dian)稱(cheng)(cheng)(cheng)為該(gai)結(jie)(jie)(jie)(jie)點(dian)(dian)(dian)(dian)(dian)的(de)(de)(de)"雙親",結(jie)(jie)(jie)(jie)點(dian)(dian)(dian)(dian)(dian)的(de)(de)(de)后趨(qu)(qu)結(jie)(jie)(jie)(jie)點(dian)(dian)(dian)(dian)(dian)稱(cheng)(cheng)(cheng)為該(gai)結(jie)(jie)(jie)(jie)點(dian)(dian)(dian)(dian)(dian)的(de)(de)(de)"子(zi)(zi)(zi)女"或" 孩子(zi)(zi)(zi)",同一結(jie)(jie)(jie)(jie)點(dian)(dian)(dian)(dian)(dian)的(de)(de)(de)"子(zi)(zi)(zi)女"之間互稱(cheng)(cheng)(cheng)"兄弟"。

普通(tong)樹轉二叉樹,一般(ban)采用左“子女”右“兄弟”的(de)方式(shi)來轉化。

完全二叉樹

對滿(man)二叉(cha)樹(shu),從(cong)第一(yi)層的(de)結點(dian)(即根)開始,由(you)下而上,由(you)左及右,按順序(xu)結點(dian)編(bian)號,便(bian)得到滿(man)二叉(cha)樹(shu)的(de)一(yi)個順序(xu)表(biao)示。據此編(bian)號,完(wan)全(quan)二叉(cha)樹(shu)定義如下:一(yi)棵具有(you)n個結點(dian),深度為(wei)K的(de)二叉(cha)樹(shu),當且僅當所有(you)結點(dian)對應(ying)于深度為(wei)K的(de)滿(man)二叉(cha)樹(shu)中編(bian)號由(you)1至(zhi)n的(de)那(nei)些結點(dian)時,該二叉(cha)樹(shu)便(bian)是完(wan)全(quan)二叉(cha)樹(shu)。圖4是一(yi)棵完(wan)全(quan)二叉(cha)樹(shu)。

二叉樹遍歷

遍(bian)歷(li)是(shi)(shi)對樹(shu)(shu)的(de)一(yi)(yi)種最基(ji)本的(de)運算,所(suo)(suo)謂遍(bian)歷(li)二叉樹(shu)(shu),就是(shi)(shi)按一(yi)(yi)定的(de)規(gui)則和(he)順(shun)序(xu)走遍(bian)二叉樹(shu)(shu)的(de)所(suo)(suo)有結點(dian),使(shi)每一(yi)(yi)個(ge)(ge)結點(dian)都被訪問(wen)一(yi)(yi)次(ci),而且(qie)只被訪問(wen)一(yi)(yi)次(ci)。由于(yu)二叉樹(shu)(shu)是(shi)(shi)非線性結構,因(yin)此,樹(shu)(shu)的(de)遍(bian)歷(li)實質上是(shi)(shi)將二叉樹(shu)(shu)的(de)各個(ge)(ge)結點(dian)轉換成為一(yi)(yi)個(ge)(ge)線性序(xu)列來(lai)表示。

設L、D、R分別表(biao)示遍(bian)歷左子樹(shu)、訪(fang)問根(gen)結點(dian)和遍(bian)歷右子樹(shu), 則對一棵二叉樹(shu)的遍(bian)歷有(you)三種情況(kuang):DLR(稱(cheng)為先根(gen)次序遍(bian)歷),LDR(稱(cheng)為中根(gen)次序遍(bian)歷),LRD (稱(cheng)為后根(gen)次序遍(bian)歷)。

(1)

訪(fang)問根(gen);按前序(xu)遍歷左(zuo)子(zi)樹;按前序(xu)遍歷右子(zi)樹

(2)

按中序(xu)遍歷左子(zi)樹(shu);訪(fang)問根;按中序(xu)遍歷右子(zi)樹(shu)

(3)

按后序(xu)遍歷左子樹(shu)(shu);按后序(xu)遍歷右子樹(shu)(shu);訪問根

(4)層次遍歷

即(ji)按照層(ceng)次訪(fang)問(wen),通常用(yong)來做。訪(fang)問(wen)根,訪(fang)問(wen)子女(nv),再訪(fang)問(wen)子女(nv)的子女(nv)(越往后的層(ceng)次越低)(兩(liang)個子女(nv)的級別相同(tong))

特殊的二叉樹

1. 完全二叉樹

Complete Binary Tree

若(ruo)設二叉樹(shu)(shu)的高度(du)為(wei)h,除第 h 層外(wai),其它各層 (1~h-1) 的結(jie)點數都達到(dao)最大個數,第 h 層從右向左(zuo)連續缺(que)若(ruo)干結(jie)點,這就是完全二叉樹(shu)(shu)。

2. 滿二叉樹

Full Binary Tree:

一個(ge)高度為(wei)h的二(er)叉樹包含正(zheng)是2^h-1元素稱為(wei)滿二(er)叉樹。

返回目錄

posted @ 2011-08-03 11:25  張占嶺  閱讀(872)  評論(0)    收藏  舉報