資料結構第六章樹

2021-08-16 18:05:31 字數 3172 閱讀 1145

第六章 樹

1.樹是n個結點的有限集。n=0時稱為空樹。在任意乙個非空樹中:

(1)有且僅有乙個特定的稱為根的結點

(2)當n>1時,其餘節點可分為m個互不相交的有限集,其中每乙個集合又是一棵樹,並成為根的子樹。

2.結點分類:結點擁有的子樹稱為結點的度。度為0的結點稱為葉結點或終端節點;度不為0的結點稱為非終端結點或分支結點。除根結點以外,分支節點也稱為內部結點。樹的度是樹內部各結點的度的最大值。

3.結點間的關係:結點的子樹的根稱為該結點的孩子,相應的,該結點稱為孩子的雙親。同乙個雙親的孩子互稱兄弟。結點的祖先是從根結點所經分支上的所有結點。以某結點為根的子樹中的任意結點都成為該結點的孫子。

4.結點的層次從根開始定義,樹中結點最大層次成為樹的深度或高度。

森林是m棵互不相交的樹的集合。

5.二叉樹:它是結點的有限集合,這個集合或者為空集或者由乙個根及兩棵不相交的分別稱作這個根的左右子樹的二叉樹組成。

特點:每個結點至多由兩棵子樹(即不存在度大於二的結點);二叉樹的子樹由左右之分,且次序不能任意顛倒,只有一棵子樹時也必須分清左右子樹。

6.二叉樹的性質:

(1)乙個非空二叉樹的第i層上至多有2i-1個結點

(2)深度為k的二叉樹至多有2k-1個結點

(3)對任何一棵非空二叉樹t,如果葉結點數為n0,度為2的結點為n2,則n0=n2+1;

度:n=n0+n1+n2; 分支:n-1=2n2+n1;

7.滿二叉樹:深度為k且有2k-1個結點的二叉樹,不存在度為1的點

8.完全二叉樹:深度為k,有n個結點的二叉樹,當且僅當其每乙個結點都與深度為k的滿二叉樹編號從1到n的結點完全對應時,稱為完全二叉樹。

特點:葉子結點只可能出現在層次最大的前兩層上出現。

若節點無左子樹,則沒有右子樹

性質:

9.二叉樹的儲存結構

(1) 順序儲存結構

實現:按滿二叉樹的結點層次編號,依次存放二叉樹中的資料元素。

特點:結點間關係蘊含在其儲存位置中;浪費空間,適於儲存滿二叉樹和完全二叉樹。

(2)鏈式儲存結構(二叉鍊錶、三叉鍊錶)

二叉鍊錶:

typedef

struct binode

binode,*bitree;

在n個節點的二叉鍊錶中,有n+1個空指標域

10.二叉樹構建

11.二叉樹前序、中序、後序遍歷(遞迴)

void

preordertree(bitreet)}

void

inordertree(bitree &t)

}void

postordertree(bitree &t)

}

12.二叉樹前序、中序、後序遍歷(非遞迴)

void preorder(bitree t)

if(s.top!=-

1)

}}void inorder(bitree &t)

if(s.top!=-

1) }}

後序遍歷需要重新定義棧

typedef

struct

dstruct;

typedef

struct

sqstack;

void postorder(bitree t)

if(s.top!=-1)

else}}

}

求中序的第乙個結點的演算法

p=t;

while(p->left)

p=p->left;

printf("%c ",p->data);

求中序的最後乙個結點的演算法

p=t;

while(p->right)

p=p->right;

printf("%c ",p->data);

已知一棵樹的先序、後序或層次序列結合中序,可以唯一確定一棵二叉樹。

13.找出滿足下列條件的二叉樹

先序序列和後序序列相同

dlr和lrd相同——–只有乙個根結點或空樹

先序序列和中序序列相同

dlr和ldr相同——–任何乙個結點無左子樹

中序序列和後序序列相同

ldr和lrd相同——–任何乙個結點無右子樹

中序序列和層次序列相同

ldr和層次序列相同–任何乙個結點無左子樹

13.求二叉樹深度的演算法

int depth(bitree t)

}

求二叉樹結點的個數

int size(bitree t)

二叉樹葉子結點個數

int leafcount(bitree t)

int leaf=0;

void leafnum(bitree t)

}

複製二叉樹

bitree copy(bitree t)

}

層次遍歷(非遞迴)

void levelorder(bitree t)

}

已知中序先序遍歷序列構造二叉樹

bitree createbitree(char pre,char

in,int l1,int r1,int l2,int r2)

第六章 資料結構

存放同一種資料型別的多個元素的容器,通過索引 記憶體偏移量 進行元素的訪問,陣列的大小一旦確定就不能改變。陣列其實也是線性表結構,在記憶體中陣列的元素是緊挨著連續儲存的。特點 查詢快 增刪慢 舉例 定義乙個陣列 int arr new int 想在2的後面插入乙個新的元素11,這時候就需要定義乙個新...

資料結構筆記 第六章

一.圖的儲存結構及實現 圖可以使用兩種儲存結構,分別是鄰接矩陣和鄰接表。鄰接矩陣以矩陣的形式儲存圖所有頂點間的關係。鄰接矩陣具有以下特點 1,鄰接矩陣是正矩陣,即橫縱維數相等。2,矩陣的每一行或一列代表乙個頂點,行與列的交點對應這兩個頂點的邊。3,矩陣的點代表邊的屬性,1代表有邊,0代表無邊,所以矩...

資料結構第六章小結

第六章主要學習圖,感覺有蠻多概念和演算法要去記住,可能會造成混淆 在學習過程中,感覺不是實打實的掌握,還得多看看書。思維導圖如下 個人小測中 1 使用鄰接矩陣a儲存無向網路,若i號頂點與j號頂點之間不存在邊,則a i j 值為多少 連通圖中 鄰接矩陣 連通為1,不連通為0,無向網路連通為權值,不連通...