資料結構實踐專案 樹和二叉樹(1)

2021-09-23 17:53:58 字數 2682 閱讀 7526

本文針對[資料結構基礎系列(6):樹和二叉樹]第1-6, 8-10課時

1 樹結構導學

2 樹的基本概念

3 樹的基本術語

4 樹的性質

5 樹的儲存結構

6 二叉樹概念和性質

8 二叉樹的儲存結構

9 二叉樹的基本運算及其實現

10 二叉樹的遍歷

定義二叉樹的鏈式儲存結構,實現其基本運算,並完成測試。

要求:

1、標頭檔案btree.h中定義資料結構並宣告用於完成基本運算的函式。對應基本運算的函式包括:

void createbtnode(btnode *&b,char *str);        //由str串建立二叉鏈

btnode *findnode(btnode *b,elemtype x); //返回data域為x的節點指標

btnode *lchildnode(btnode *p); //返回*p節點的左孩子節點指標

btnode *rchildnode(btnode *p); //返回*p節點的右孩子節點指標

int btnodedepth(btnode *b); //求二叉樹b的深度

void dispbtnode(btnode *b); //以括號表示法輸出二叉樹

void destroybtnode(btnode *&b); //銷毀二叉樹

2、在btree.cpp中實現這些函式

3、在main函式中完成測試,包括如下內容:

(1)用」a(b(d,e(h(j,k(l,m(,n))))),c(f,g(,i)))」建立如圖的二叉樹用於測試。

(2)輸出二叉樹

(3)查詢值為』h』的節點,若找到,輸出值為』h』的節點的左、右孩子的值

(4)求高度二叉樹高度

(5)銷毀二叉樹

[參考解答]

實現二叉樹的先序、中序、後序遍歷的遞迴演算法,並對用」a(b(d,e(h(j,k(l,m(,n))))),c(f,g(,i)))」建立的二叉樹進行測試。

請利用二叉樹演算法庫。

[參考解答]

假設二叉樹採用二叉鏈儲存結構儲存,分別實現以下演算法,並在程式中完成測試:

(1)計算二叉樹節點個數;

(2)輸出所有葉子節點;

(3)求二叉樹b的葉子節點個數;

(4)設計乙個演算法level(b,x,h),返回二叉鏈b中data值為x的節點的層數。

(5)判斷二叉樹是否相似(關於二叉樹t1和t2相似的判斷:①t1和t2都是空的二叉樹,相似;②t1和t2之一為空,另一不為空,則不相似;③t1的左子樹和t2的左子樹是相似的,且t1的右子樹與t2的右子樹是相似的,則t1和t2相似。)

請利用二叉樹演算法庫。

[參考解答]

1、某樹,用括號表示法描述為:a(b(e),c(f,g(i,j),h(k)),d)

(1)請用樹形表示法,畫出這個樹

(2)雙親表示法的資料結構定義為

typedef

struct

ptree[maxsize];

請描述這個樹利用雙親表示法時的儲存

(3)用孩子鏈儲存時,每個節點定義下面的型別

typedef

struct node

tsonnode;

請描述這個樹利用孩子鏈表示法時的儲存

(4)孩子兄弟鏈儲存結構中的節點定義為

typedef

struct tnode

tsbnode;

請描述這個樹利用孩子兄弟鏈表示法時的儲存

(5)樹結構還可以用一種孩子鏈表示法

//定義孩子節點,將形成乙個單鏈表

typedef

struct node

nodetype;

//定義樹節點型別,各節點組成順序儲存的線性表,若節點要作為孩子節點,「孩子節點編號(no)」即為在順序表中的序號

typedef

struct

ctree[maxsize];

請描述這個樹利用孩子兄弟鏈表示法時的儲存。

2、某二叉樹的順序儲存結構如下所示:

(1)請用樹形表示法,畫出二叉樹的結構

(2)請用括號表示法,給出這個二叉樹的表示

(3)請寫出這個二叉樹的先序、中序、後序遍歷序列

3、二叉樹還可以採用一種「偽」鏈式儲存結構,如下所示

其中,lchild和rchild分別為節點左右孩子的指標域(在這裡,使用節點編號作為指標域值,0表示指標域為空),data為節點的資料域。請畫出這個二叉樹的樹形表示。

4、一棵二叉樹的先序、中序和後序序列分別如下所示,其中有一部分未顯示出來:

先序:_b_f_iceh_g

中序:d_kfia_ejc_

後序:_k_fbhj_g_a

請求出空格處的內容,並畫出二叉樹。

資料結構實踐專案 樹和二叉樹(2)

本文針對資料結構基礎系列 6 樹和二叉樹第7,11 15課時 7 二叉樹與樹 森林之間的轉換 11 二叉樹遍歷非遞迴演算法 12 層次遍歷演算法 13 二叉樹的構造 14 線索二叉樹 15 哈夫曼樹 執行並重複測試教學內容中涉及的演算法。改變測試資料進行重複測試的意義在於,可以從更多角度體會演算法,...

資料結構 樹和二叉樹

第一節 二叉樹的定義與基本操作 定義 我們把滿足以下兩個條件的樹型結構叫做二叉樹 binary tree 1 每個結點的度都不大於2 2 每個結點的孩子結點次序不能任意顛倒。由定義得出 二叉樹的每個結點只能含有0 1或2個孩子,且有左右之分。1 二叉樹的五種基本形態 2 二叉樹性質 性質1 二叉樹第...

資料結構 樹和二叉樹

定義 二叉樹是n n 0 個節點的有限集合,該集合或者為空集 稱為空二叉樹 或者由乙個根節點和兩棵互不相交的 分別稱為根節點的左子樹和右子樹的二叉樹組成。特點 每個節點最多有兩棵子樹 二叉樹是有序的,其次序不能任意顛倒 斜樹 1.所有節點都只有左子樹的二叉樹稱為左斜樹 2.所有節點都只有右子樹的二叉...