樹(shù)是一種重要的非線性數(shù)據(jù)結(jié)構(gòu),直觀地看,它是數(shù)據(jù)元素(在樹(shù)中稱(chēng)為結(jié)點(diǎn))按分支關(guān)系組織起來(lái)的結(jié)構(gòu),很象自然界中的樹(shù)那樣。
樹(shù)結(jié)構(gòu)圖片
中文名稱(chēng) | 樹(shù)結(jié)構(gòu) | 定????義 | 每個(gè)元素稱(chēng)為結(jié)點(diǎn)(node) |
---|---|---|---|
屬????于 | 一種重要的非線性數(shù)據(jù)結(jié)構(gòu) | 層????次 | 根結(jié)點(diǎn)的層次為1 |
樹(shù)的遍歷是樹(shù)的一種重要的運(yùn)算。所謂遍歷是指對(duì)樹(shù)中所有結(jié)點(diǎn)的系統(tǒng)的訪問(wèn),即依次對(duì)樹(shù)中每個(gè)結(jié)點(diǎn)訪問(wèn)一次且僅訪問(wèn)一次。樹(shù)的3種最重要的遍歷方式分別稱(chēng)為前序遍歷、中序遍歷和后序遍歷。以這3種方式遍歷一棵樹(shù)時(shí),若按訪問(wèn)結(jié)點(diǎn)的先后次序?qū)⒔Y(jié)點(diǎn)排列起來(lái),就可分別得到樹(shù)中所有結(jié)點(diǎn)的前序列表,中序列表和后序列表。相應(yīng)的結(jié)點(diǎn)次序分別稱(chēng)為結(jié)點(diǎn)的前序、中序和后序。
樹(shù)的這3種遍歷方式可遞歸地定義如下:
§ 如果T是一棵空樹(shù),那么對(duì)T進(jìn)行前序遍歷、中序遍歷和后序遍歷都是空操作,得到的列表為空表。
§ 如果T是一棵單結(jié)點(diǎn)樹(shù),那么對(duì)T進(jìn)行前序遍歷、中序遍歷和后序遍歷都只訪問(wèn)這個(gè)結(jié)點(diǎn)。這個(gè)結(jié)點(diǎn)本身就是要得到的相應(yīng)列表。
§ 否則,設(shè)T如圖6所示,它以n為樹(shù)根,樹(shù)根的子樹(shù)從左到右依次為T(mén)1,T2,..,Tk,那么有:
§ 對(duì)T進(jìn)行前序遍歷是先訪問(wèn)樹(shù)根n,然后依次前序遍歷T1,T2,..,Tk。
§ 對(duì)T進(jìn)行中序遍歷是先中序遍歷T1,然后訪問(wèn)樹(shù)根n,接著依次對(duì)T2,T2,..,Tk進(jìn)行中序遍歷。
§ 對(duì)T進(jìn)行后序遍歷是先依次對(duì)T1,T2,..,Tk進(jìn)行后序遍歷,最后訪問(wèn)樹(shù)根n。
排序是一種十分重要的運(yùn)算。所謂排序就是把一堆雜亂無(wú)章的元素按照某種次序排列起來(lái),形成一個(gè)線性有序的序列。二叉排序樹(shù)是利用二叉樹(shù)的結(jié)構(gòu)特點(diǎn)來(lái)實(shí)現(xiàn)對(duì)元素排序的。
一、二叉排序樹(shù)的定義
二叉排序樹(shù)或者是空樹(shù),或者是具有如下性質(zhì)的二叉樹(shù):
1、左子樹(shù)上所有結(jié)點(diǎn)的數(shù)據(jù)值均小于根結(jié)點(diǎn)的數(shù)據(jù)值;
2、右子樹(shù)上所有結(jié)點(diǎn)的數(shù)據(jù)值均大于或等于根結(jié)點(diǎn)的數(shù)據(jù)值;
3、左子樹(shù)、右子樹(shù)本身又各是一棵二叉排序樹(shù)。
由此可見(jiàn),二叉排序樹(shù)是一種特殊結(jié)構(gòu)的二叉樹(shù)。(18(10(3,15(12,15)),21(20,21(,37))))就是一棵二叉排序樹(shù)。
二、二叉排序樹(shù)的構(gòu)造
二叉排序樹(shù)的構(gòu)造過(guò)程實(shí)質(zhì)上就是排序的過(guò)程,它是二叉排序樹(shù)作媒介,將一個(gè)任意的數(shù)據(jù)序列變成一個(gè)有序序列。二叉排序樹(shù)的構(gòu)造一般是采用陸續(xù)插入結(jié)點(diǎn)的辦法逐步構(gòu)成的。具體構(gòu)造的思路是:
1、以待排序的數(shù)據(jù)的第一個(gè)數(shù)據(jù)構(gòu)成根結(jié)點(diǎn);
2、對(duì)以后的各個(gè)數(shù)據(jù),逐個(gè)插入結(jié)點(diǎn),而且規(guī)定:在插入過(guò)程的每一步,原有樹(shù)結(jié)點(diǎn)位置不再變動(dòng),只是將新數(shù)據(jù)的結(jié)點(diǎn)作為一個(gè)葉子結(jié)點(diǎn)插入到合適的位置,使樹(shù)中任何結(jié)點(diǎn)的數(shù)據(jù)與其左、右子樹(shù)結(jié)點(diǎn)數(shù)據(jù)之間的關(guān)系仍然符合對(duì)二叉排序樹(shù)的要求。
一、哈夫曼樹(shù)的含義:哈夫曼樹(shù)是一種帶權(quán)路徑長(zhǎng)度最短的樹(shù)。
所謂路徑長(zhǎng)度就是某個(gè)端結(jié)點(diǎn)到樹(shù)的根結(jié)點(diǎn)的距離,等于該端結(jié)點(diǎn)的祖先數(shù),或該結(jié)點(diǎn)所在層數(shù)減1,用lk表示。二叉樹(shù)中每個(gè)端結(jié)點(diǎn)對(duì)應(yīng)的一個(gè)實(shí)數(shù)稱(chēng)為該結(jié)點(diǎn)的權(quán),用Wk表示。我們定義各端結(jié)點(diǎn)的權(quán)Wk與相應(yīng)的路徑程度lk乘積的代數(shù)和為該二叉樹(shù)的帶權(quán)路徑長(zhǎng)度,用WPL表示,即:
可以證明,哈夫曼樹(shù)是最優(yōu)二叉樹(shù)。如給定權(quán)值{5,4,7,2,3},可以生成很多棵二叉樹(shù),其中的(A(B(7,5),C(4,D(3,2))))是哈夫曼樹(shù)。
二、哈夫曼樹(shù)的構(gòu)造
1、哈夫曼算法:
(1)根據(jù)給定的n個(gè)權(quán)值{W1,W2,…,Wn}構(gòu)成n棵二叉樹(shù)的森林:F{T1,T2,…,Tn}。其中每棵二叉樹(shù)Ti只有一個(gè)帶權(quán)為Wi的根結(jié)點(diǎn),其左右子樹(shù)為空。
(2)在F中選取兩棵結(jié)點(diǎn)的權(quán)值最小的樹(shù)作為左右子樹(shù)構(gòu)成一棵新的二叉樹(shù),且置新的二叉樹(shù)的根結(jié)點(diǎn)的權(quán)值為其左右子樹(shù)上根結(jié)點(diǎn)的權(quán)值之和。
(3)在F中刪除這兩棵樹(shù),同時(shí),將新得到的二叉樹(shù)加入F中。
(4)重復(fù)(2)、(3),直到F只含一棵樹(shù)為止。最后的這棵樹(shù)便是哈夫曼樹(shù)。
2、算法描述
為了上述算法,選用數(shù)組型的鏈表作為存儲(chǔ)結(jié)構(gòu),其類(lèi)型設(shè)計(jì)如下:
Type tnode=RECORD
weight:real;
Lc,Rc:integer;
END;
tree=ARRAY[1..2*n-1] of tnode;
node=RECORD
weight:real;
adr:integer;
END;
A=ARRAY[1..n] of node;
下面是在這個(gè)存儲(chǔ)結(jié)構(gòu)上實(shí)現(xiàn)的構(gòu)造哈夫曼樹(shù)的算法:
Procedure Huffmantree(VAR W:ARRAY[1..n]OF real;VAR TR:tree);
VAR AT:A;
BENGIN
FOR i:=1 TO n DO{實(shí)現(xiàn)第(1)步}
BEGIN
TR.weight:=W;{將權(quán)值放在樹(shù)葉中}
TR.Lc:=0;
TR.Rc:=0;
AT.weight:=TR.weight;{用AT存放當(dāng)前森林的根}
AT.adr:=i;
END;
num:=n;{森林中結(jié)點(diǎn)個(gè)數(shù)}
K:=num+1;{形成的新結(jié)點(diǎn)在TR數(shù)組中的位置}
WHILE (num>=2) DO {重復(fù)實(shí)現(xiàn)第(2)、(3)步}
BEGIN
SORTING(AT,num);{按根值大小對(duì)森林中的樹(shù)進(jìn)行升序排列}
TR[k].weight:=AT[1].weight+AT[2].weight;
{選擇兩棵結(jié)點(diǎn)權(quán)值最小的樹(shù)構(gòu)造新二叉樹(shù)}
TR[k].Lc:=AT[1].adr; {左子樹(shù):權(quán)值最小的樹(shù)}
TR[k].Rc:=AT[2].adr; {右子樹(shù):權(quán)值次小的樹(shù)}
AT[1].weight:=TR[k].weight; {新樹(shù)賦予第一}
AT[1].adr:=k; {新樹(shù)結(jié)點(diǎn)標(biāo)號(hào)}
AT[2].weight:=AT[num].weight;{原最后樹(shù)賦予第二}
AT[2].adr:=AT[num].adr; {跟進(jìn)結(jié)點(diǎn)標(biāo)號(hào)}
num:=num-1; {刪除原最后樹(shù)}
k:=k+1; {增加結(jié)點(diǎn)標(biāo)號(hào)}
END;
END;
三、應(yīng)用:哈夫曼編碼
利用哈夫曼樹(shù)構(gòu)造的用于通信的二進(jìn)制編碼,稱(chēng)為哈夫曼編碼。
例如,有一段電文'CAST TAT A SA',統(tǒng)計(jì)電文中字母的頻度,f('C')=1,f('S')=2,f('T')=3,f(' ')=3,f('A')=4,可用其頻度{1,2,3,3,4}為權(quán)值生成Huffman樹(shù),并在每個(gè)葉子上注明對(duì)應(yīng)的字符。樹(shù)中從根到每個(gè)葉子都有一條路徑,若對(duì)路徑上的各分支進(jìn)行約定,指向左子樹(shù)根的分支用"0"碼表示,指向右子樹(shù)根的分支用"1"碼表示,再取每條路徑上的"0"或"1"的序列作為與各個(gè)葉子對(duì)應(yīng)的字符的編碼,這就是哈夫曼編碼。
一棵樹(shù)(tree)是由n(n>0)個(gè)元素組成的有限集合,其中:
(1)每個(gè)元素稱(chēng)為結(jié)點(diǎn)(node);
(2)有一個(gè)特定的結(jié)點(diǎn),稱(chēng)為根結(jié)點(diǎn)或根(root);
(3)除根結(jié)點(diǎn)外,其余結(jié)點(diǎn)被分成m(m>=0)個(gè)互不相交的有限集合,而每個(gè)子集又都是一棵樹(shù)(稱(chēng)為原樹(shù)的子樹(shù))
所謂的"樹(shù)"型結(jié)構(gòu)很好解釋和理解~ 故名思義樹(shù)的結(jié)構(gòu)是樹(shù)干,樹(shù)枝,樹(shù)葉。那樹(shù)以誰(shuí)為主呢? 樹(shù)干呀樹(shù)干上不是樹(shù)枝嗎樹(shù)枝上有樹(shù)葉啊。它們都屬于一個(gè)整體就是樹(shù),但是有主次之分的,不能沒(méi)有...
樹(shù)形結(jié)構(gòu)是一層次的嵌套結(jié)構(gòu)。 一個(gè)樹(shù)形結(jié)構(gòu)的外層和內(nèi)層有相似的結(jié)構(gòu), 所以這種結(jié)構(gòu)多可以遞歸的表示。經(jīng)典數(shù)據(jù)結(jié)構(gòu)中的各種樹(shù)狀圖是一種典型的樹(shù)形結(jié)構(gòu):一顆樹(shù)可以簡(jiǎn)單的表示為根, 左子樹(shù), 右子樹(shù)。 左子...
有時(shí)在excel表格中需要建立樹(shù)形結(jié)構(gòu),如下圖所示。對(duì)動(dòng)物、植物進(jìn)行分類(lèi)。動(dòng)物、植物類(lèi)中分別有子類(lèi),像動(dòng)物中有鳥(niǎo)、貓、狗等。每個(gè)子類(lèi)又有自己的子類(lèi),或者有根個(gè)體。因此建立了上面這個(gè)樹(shù)結(jié)構(gòu)。在excel...
樹(shù)的度--也即是寬度,簡(jiǎn)單地說(shuō),就是結(jié)點(diǎn)的分支數(shù)。以組成該樹(shù)各結(jié)點(diǎn)中最大的度作為該樹(shù)的度,如上圖的樹(shù),其度為3;樹(shù)中度為零的結(jié)點(diǎn)稱(chēng)為葉結(jié)點(diǎn)或終端結(jié)點(diǎn)。樹(shù)中度不為零的結(jié)點(diǎn)稱(chēng)為分枝結(jié)點(diǎn)或非終端結(jié)點(diǎn)。除根結(jié)點(diǎn)外的分枝結(jié)點(diǎn)統(tǒng)稱(chēng)為內(nèi)部結(jié)點(diǎn)。
樹(shù)的深度--組成該樹(shù)各結(jié)點(diǎn)的最大層次,如上圖,其深度為4;
根結(jié)點(diǎn)的層次為1,其他結(jié)點(diǎn)的層次等于它的父結(jié)點(diǎn)的層次數(shù)加1.
對(duì)于一棵子樹(shù)中的任意兩個(gè)不同的結(jié)點(diǎn),如果從一個(gè)結(jié)點(diǎn)出發(fā),按層次自上而下沿著一個(gè)個(gè)樹(shù)枝能到達(dá)另一結(jié)點(diǎn),稱(chēng)它們之間存在著一條路徑??捎寐窂剿?jīng)過(guò)的結(jié)點(diǎn)序列表示路徑,路徑的長(zhǎng)度等于路徑上的結(jié)點(diǎn)個(gè)數(shù)減1.
指若干棵互不相交的樹(shù)的集合
二叉樹(shù)是一類(lèi)非常重要的樹(shù)形結(jié)構(gòu),它可以遞歸地定義如下:
二叉樹(shù)T是有限個(gè)結(jié)點(diǎn)的集合,它或者是空集,或者由一個(gè)根結(jié)點(diǎn)u以及分別稱(chēng)為左子樹(shù)和右子樹(shù)的兩棵互不相交的二叉樹(shù)u(1)和u(2)組成。若用n,n1和n2分別表示T,u(1)和u(2)的結(jié)點(diǎn)數(shù),則有n=1+n1+n2 。u(1)和u(2)有時(shí)分別稱(chēng)為T(mén)的第一和第二子樹(shù)。
因此,二叉樹(shù)的根可以有空的左子樹(shù)或空的右子樹(shù),或者左、右子樹(shù)均為空。
二叉樹(shù)具有以下的重要性質(zhì):
高度為h≥0的二叉樹(shù)至少有h+1個(gè)結(jié)點(diǎn); 高度不超過(guò)h(≥0)的二叉樹(shù)至多有2h+1-1個(gè)結(jié)點(diǎn); 含有n≥1個(gè)結(jié)點(diǎn)的二叉樹(shù)的高度至多為n-1; 含有n≥1個(gè)結(jié)點(diǎn)的二叉樹(shù)的高度至少為 logn ,因此其高度為Ω(logn)。 詳見(jiàn)二叉樹(shù)詞條。
格式:pdf
大?。?span id="lj5tf77" class="single-tag-height">331KB
頁(yè)數(shù): 4頁(yè)
評(píng)分: 4.7
提出了一種基于數(shù)據(jù)庫(kù)的提高應(yīng)用程序可擴(kuò)展性的方法,該方法采用業(yè)務(wù)數(shù)據(jù)的組織結(jié)構(gòu)、功能模塊編譯成動(dòng)態(tài)鏈接庫(kù)等。通過(guò)相關(guān)數(shù)據(jù)在數(shù)據(jù)庫(kù)中的存儲(chǔ)方式,有效地提高了應(yīng)用程序的可擴(kuò)展性,并詳細(xì)描述了應(yīng)用程序可擴(kuò)展性的設(shè)計(jì)方法及代碼實(shí)現(xiàn)。
格式:pdf
大?。?span id="xfxzjbd" class="single-tag-height">331KB
頁(yè)數(shù): 1頁(yè)
評(píng)分: 4.5
abs樹(shù)脂結(jié)構(gòu)及分類(lèi)
仿真棕櫚樹(shù)采用璃鋼樹(shù)脂樹(shù)桿結(jié)構(gòu),采用高性能環(huán)氧樹(shù)脂和玻璃纖維纏繞成型,樹(shù)桿內(nèi)采用國(guó)標(biāo)鋼結(jié)構(gòu),樹(shù)葉采用ABS塑料或PU等高性能防阻燃環(huán)保材料。耐腐蝕性能良好,耐老化耐高溫防阻燃,更加環(huán)保,防紫外線。
由圖遍歷的過(guò)程中經(jīng)過(guò)的邊加上圖的所有頂點(diǎn)所構(gòu)成的子圖。
(1)n個(gè)頂點(diǎn)的連通子圖的生成樹(shù)是一個(gè)極小連通子圖,它包含圖中所有頂點(diǎn)和n-1條邊(但有n-1條邊的圖不一定是生成樹(shù))。
(2)生成樹(shù)中任意兩個(gè)頂點(diǎn)間的路徑是唯一的。
生成樹(shù)T各邊的權(quán)值總和稱(chēng)為該樹(shù)的權(quán)。
將權(quán)最小的生成樹(shù)稱(chēng)為圖的最小生成樹(shù)。
Krusal算法和Prim算法是兩個(gè)構(gòu)造最小生成樹(shù)的著名算法。
結(jié)構(gòu)重要度分析是從事故樹(shù)結(jié)構(gòu)上入手分析各基本事件的重要程度。