一、實驗目的
(1)掌握二叉樹的邏輯結構;
(2)掌握二叉樹的二叉鍊錶儲存結構;
(3)掌握基於二叉鍊錶儲存的二叉樹的遍歷操作的實現。
二、實驗內容(1)建立一棵含有n個結點的二叉樹,採用二叉鍊錶儲存;
(2)前序(或中序、後序)遍歷該二叉樹。
(3)統計該二叉樹中葉子個數。
(4)統計該二叉樹中結點個數。
(5)求該二叉樹的深度。
要求:(1)設計選單,根據選單提示進行操作。
(2)按先序遍歷序列建立二叉樹的二叉鍊錶。
注:二叉樹的遍歷一般採用遞迴演算法,只要涉及到遞迴,一定會使用堆疊來實現。雖然在程式中看不到具體的堆疊,但可以通過觀察函式呼叫的關係來理解認識堆疊。堆疊是實現二叉樹遍歷的最基本的資料結構。
三、演算法設計
1、先序遍歷遞迴建立二叉樹
步驟
掃瞄字串行, 讀入字元ch
。
如果ch是乙個"#"
字元, 則表明該二叉樹為空樹, 即bt
為null
; 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的葉子節點個數。根據題目為...
資料結構 二叉樹鏈結結構基本操作
二叉樹順序儲存的優缺點 順序儲存結構就是使用陣列來儲存,順序結構操作比較簡單,對於堆結構來說,適合使用順序儲存方式來解決。但陣列只適合表示完全二叉樹,對於一般的二叉樹如果採用順序儲存方式會造成大量的空間浪費,這是我們不希望看到的。由此引出來二叉樹的鏈式儲存。並實現二叉樹的以下操作 建立二叉樹 拷貝二...