資料結構二叉樹的基本操作的實現

2021-10-06 09:13:27 字數 3915 閱讀 5595

一、實驗目的

(1)掌握二叉樹的邏輯結構;

(2)掌握二叉樹的二叉鍊錶儲存結構;

(3)掌握基於二叉鍊錶儲存的二叉樹的遍歷操作的實現。

二、實驗內容
(1)建立一棵含有n個結點的二叉樹,採用二叉鍊錶儲存;

(2)前序(或中序、後序)遍歷該二叉樹。

(3)統計該二叉樹中葉子個數。

(4)統計該二叉樹中結點個數。

(5)求該二叉樹的深度。

要求:(1)設計選單,根據選單提示進行操作。

(2)按先序遍歷序列建立二叉樹的二叉鍊錶。

注:二叉樹的遍歷一般採用遞迴演算法,只要涉及到遞迴,一定會使用堆疊來實現。雖然在程式中看不到具體的堆疊,但可以通過觀察函式呼叫的關係來理解認識堆疊。堆疊是實現二叉樹遍歷的最基本的資料結構。

三、演算法設計

1、先序遍歷遞迴建立二叉樹

步驟

掃瞄字串行, 讀入字元ch

如果ch是乙個"#"字元, 則表明該二叉樹為空樹, 即btnull; 3. 否則執行以下操作:

申請乙個結點空間bt;

ch賦給bt-> data;

遞迴建立bt的左子樹;

遞迴建立bt的右子樹;

演算法

void

createbitree

(bitree &bt)

}

2、遍歷二叉樹

2.1 先序遍歷

步驟

若二叉樹為空,則空操作;

否則 :

訪問根結點;

先序遍歷左子樹;

先序遍歷右子樹

演算法

void

preorder

(bitree &bt)

}

2.2 中序遍歷

步驟

若二叉樹為空,則空操作;

否則中序遍歷左子樹;

訪問根結點;

中序遍歷右子樹。

演算法

void

inorder

(bitree bt)

}

2.3 後序遍歷

步驟

若二叉樹為空,則空操作;

否則後序遍歷左子樹;

後序遍歷右子樹;

訪問根結點。

演算法

void

postorder

(bitree bt)

}

3、統計二叉樹葉子結點個數

步驟

演算法

int

leafcount

(bitree &bt)

4、交換二叉樹左右子樹

演算法

void

changelr

(bitree bt)

}

5、統計二叉樹中結點的總數

步驟

演算法

int

nodecount

(bitree bt)

6、求二叉樹的深度

步驟

如果是空樹,遞迴結束,深度為0;

否則執行以下操作:

演算法

int

depth

(bitree bt)

四、執行結果

五、**實現

#include

#include

#define error 0

#define ok 1

#define telemtype char

typedef

struct bitnodebitnode,

*bitree;

//顯示根結點

void

visit

(bitree bt)

//先序遍歷

void

preorder

(bitree bt)

}//中序遍歷

void

inorder

(bitree bt)

}//後序遍歷

void

postorder

(bitree bt)

}//按先序次序輸入二叉樹中結點的值(乙個字元),建立二叉鍊錶表示的二叉樹

void

createbitree

(bitree &bt)

else

}//統計二叉樹中葉子結點的個數

intleafcount

(bitree &bt)

//交換二叉樹的左右子樹

void

changelr

(bitree bt)

}//統計二叉樹中結點的總數

intnodecount

(bitree bt)

//求二叉樹的深度

intdepth

(bitree bt)

//銷毀二叉樹

void

destroybitree

(bitree bt)

void

showmenu()

void

binaryop()

else

break

;case3:

if(bt ==

null

)else

break

;case4:

if(bt ==

null

)else

break

;case5:

count =

leafcount

(bt)

;printf

("該二叉樹有%d個葉子結點。\n"

,count)

;break

;case6:

count =

nodecount

(bt)

;printf

("該二叉樹有%d個結點。\n"

,count)

;break

;case7:

printf

("該二叉樹的深度為%d !\n"

,depth

(bt));

break

;case8:

changelr

(bt)

;printf

("交換成功!\n");

printf

("先序序列為:\n");

preorder

(bt)

;break

;case0:

printf

("程式結束!\n");

break;}

}}intmain()

作者文壇寫於 2023年5月21

資料結構 二叉樹的基本操作(二)

1.理解二叉樹的基本概念和特點 2.掌握二叉樹的鏈式儲存結構 3.掌握二叉樹的基本操作 4.掌握二叉樹遍歷操作 1.實現二叉樹的如下操作,先序遍歷 中序遍歷和後序遍歷的遞迴演算法,二叉樹如下圖所示。採用二叉鏈儲存結構實現 1 採用括號表示法,構建如下二叉樹,並輸出二叉樹b 2 採用遞迴演算法,輸出二...

資料結構 二叉樹的基本操作(一)

1.理解二叉樹的基本概念和特點 2.掌握二叉樹的鏈式儲存結構 3.掌握二叉樹的基本操作 1.實現二叉樹的如下操作,二叉樹如下圖所示。採用二叉鏈儲存結構實現 1 輸出二叉樹b 2 輸出c節點的左 右孩子節點值 3 輸出二叉樹的深度 4 輸出二叉樹b的節點個數 5 輸出二叉樹b的葉子節點個數。根據題目為...

資料結構 二叉樹鏈結結構基本操作

二叉樹順序儲存的優缺點 順序儲存結構就是使用陣列來儲存,順序結構操作比較簡單,對於堆結構來說,適合使用順序儲存方式來解決。但陣列只適合表示完全二叉樹,對於一般的二叉樹如果採用順序儲存方式會造成大量的空間浪費,這是我們不希望看到的。由此引出來二叉樹的鏈式儲存。並實現二叉樹的以下操作 建立二叉樹 拷貝二...