資料結構(一)樹

2022-07-19 07:27:18 字數 2513 閱讀 4508

是由n≥0 個結點組成的有窮集合以及結點之間關係組成的集合構成的結構,是一種一對多的資料結構。

特點:1. 有且僅有乙個結點沒有前驅結點,該結點為樹的根結點。

2. 除了根結點外,每個結點有且僅有乙個直接前驅結點。

3. 包括根結點在內,每個結點可以有多個後繼結點。

樹的術語:

1. 結點的度:該結點擁有的子樹的數目。

2. 樹的度:樹中結點度的最大值。

3. 葉結點:度為0 的結點。

4. 分支結點:度非0 的結點。

5. 層次的定義:根結點為第一層,若某結點在第i 層, 則其孩子結點(若存在)為第i+1層。

6.樹的深度: 樹中結點所處的最大層次數。如下為h=3

7.樹的有序性: 若樹中結點的子樹的相對位置不能 隨意改變, 則稱該樹為有序樹,否 則稱該樹為無序樹。

樹的性質

性質1: 樹中結點個數等於所有結點的度數加1。  

a的結點=3,b結點=3,c結點=1,x結點=2   結點個數=(3+3+1+2)+1=10

性質2:  度為k的樹中第i層上至多有k (i -1)次方 個結點(i≥1) 。

k=3 第3層的結點數=3(3-1)=3的2次方=6 所以樹為3第三層有6個結點

性質3 深度為h的k叉樹中至多有(k*h-1)/(k-1) 結點。 滿k叉樹:結點個數等於(kh-1)/(k-1) 的k叉樹。 (kh-1)為k的h次方在減1  

性質4 具有n個結點的k叉樹的最小深度為logk(n(k-1)+1)

1. 一棵非空二叉樹的第i 層最多有2的(i–1)次方個結點(i≥1)。比如第二層有多少個結點 n=2的(2-1)次方=2

2.深度為h的非空二叉樹最多有2的h次方-1個結點.

3.若非空二叉樹有n0個葉結點,有n2個度為2的結點, 則 n0=n2+1

4.具有n個結點的完全二叉樹的深度h=[log2n]+1.

二叉樹的遍歷:前序遍歷(dlr),中序遍歷(ldr),後序遍歷(lrd),層次遍歷 

如何由遍歷次序恢復二叉樹? 

已知一棵二叉樹的後序遍歷次序為debgfca,中序遍歷次序為dbeacgf,求該二叉樹的前序遍歷次序 答案:abdecfg 

二叉樹的儲存:

順序儲存: 15=2的h次方-1=2的4次方-1=15

鏈式儲存:

若一棵二叉樹中的結點, 或者為葉結點, 或者具有兩棵非空子樹,並且葉結點都集中在二叉樹的最下面一層.這樣的二叉樹為滿二叉樹.

若一棵二叉樹中只有最下面兩層的結點的度可以小於2, 並且最下面一層的結點(葉結點)都依次排列在該層從左至右的位置上。這樣的二叉樹為完全二叉樹.

性質:1、深度為h的完全二叉樹的前h-1層為滿二叉樹

2、完全二叉樹最多只有乙個度為1的分支節點

求深度為h的完全二叉樹的總結點數的範圍。答案:2(h-1)次方, 2(h)-1

二叉排序/搜尋樹的定義 :二叉排序樹binary sort tree:或者為一棵空樹,或者為具有下列特性的非空樹:

1、若其左子樹非空,則左子樹上的所有結點的關鍵字值均小於根結點關鍵字值;

2、若其右子樹非空,則右子樹上的所有結點的關鍵字值均大於等於根結點關鍵字值;

3、其左、右子樹分別為二叉排序樹。 

例:已知一組元素為(46,25,78,62,12,37,70),畫出按元素排列順序輸入生成的一棵二叉搜尋樹, 

1、定義:哈夫曼樹(huffman)樹,又稱最優樹,是一種帶權路徑長度wpl(樹帶權路徑長度之和葉子節點相加*層數從0開始)最小的二叉樹 

例2:設給定權集w=,試構造關於w的一棵哈夫曼樹,並求其加權 路徑長度wpl. 

wpl=葉子節點相加*層數從0開始

資料結構 資料結構探索(一) 樹的綜述

最近研究了mysql的索引結果,mysql的索引結果是使用了b tree的資料結構,了解了結構以後,對索引的功能和使用的一些規則就有了更加深入的了解,原來只是死記硬背規則和策略,現在感覺能知道背後到底是因為什麼。之後因為看到了set物件的元素存入方式,treeset使用的是紅黑樹儲存,來保證元素不會...

資料結構 樹(一) 樹與二叉樹

二叉樹的儲存結構與基本操作 樹的概念 資料結構中把樹枝分叉樹 樹葉 樹根抽象為結點 node 其中樹根抽象為根節點 root 且對一棵樹來說最多存在乙個根節點 把樹葉概括為葉子結點 leaf 把莖幹和樹枝同一抽象為邊 edge 樹就被定義為由若干結點和若干邊組成的資料結構,且在樹中的結點不能被邊連線...

資料結構學習之樹 (一) 樹的表示方法

樹的三種表示方法 一 雙親表示法 雙親表示法 define maxn tree size 100 typedef int telemtype 資料型別 typedef structptnode typedef structptree 根節點的雙親可以初始為 1場景一 如果要找孩子可以在ptnode結...