題目:編寫遞迴演算法,計算二叉樹中葉子結點的數目。
1
.需求分析
使用遞迴的方法,實現二叉樹中葉子節點數量的計算。
輸入:一顆樹的前序遍歷,用
#代替結束符。
例如,前序遍歷:
ab#c##d##
輸出:二叉樹的葉子節點個數。
功能:計算輸入的二叉樹的葉子節點個數。
2
.概要設計
二叉樹定義:
資料;左孩子(或為空,或為二叉樹);
右孩子(或為空,或為二叉樹);
需要使用者把二叉樹轉化成先序遍歷的字串,用
#代替結束符,然後才能使用計算機處理,並且,輸出結果仍為字串。
3
.詳細設計
//二叉樹的節點定義
typedef
struct
bitreenode
btnode,*bitree; //
按照前序遍歷的順序建立二叉樹
btnode
*createtree()
{建立根節點;
建立左子樹;
建立右子樹} //
按照後序遍歷計算葉子節點個數
intleafcount(bitreet)
{計算左子樹的葉子節點;
計算右子樹的葉子節點;
if(是葉子節點)
數量+1;} //
主函式呼叫
int_tmain(int
argc, _tchar* argv)
{接收使用者輸入,建立二叉樹;
計算二叉樹的葉子節點數}
流程圖:
4
.除錯分析
5
.使用說明
1)執行程式 2)
輸入前序遍歷二叉樹的序列 3)
回車,檢視結果
6
.測試結果
第一組:一般樹
輸入:ab#c##d##
輸出:
葉子節點:
c葉子節點:
d葉子節點的個數為:2
第二組:單枝樹
輸入:abc####
輸出:
葉子節點:
c葉子節點的個數為:
1第三組:空樹
輸入:#輸出:
葉子節點的個數為:
0第四組:滿二叉樹
輸入:abdh##i##ej###cf##g##
輸出:
葉子節點:
h葉子節點:
i葉子節點:
j葉子節點:
f葉子節點:
g葉子節點的個數為:5
第五組:一般樹
輸入:abd#g###ce##f##
輸出:
葉子節點:
g葉子節點:
e葉子節點:
f葉子節點的個數為:
37
.附錄源程式檔案清單。
資料結構作業
一,思維導圖 二,概念筆記 1,在計算時間複雜度的時候一般有 o 1 2 n 2,在計算平均時間複雜度時對p i t i 求和,其中p i 是概率,t i 是每個i的時間複雜度。3,儲存密度等於節點中個元素所佔的儲存量除以結點所佔的儲存量,儲存密度越大儲存空間的利用率越高。4,每次出棧只能出棧棧頂元...
資料結構作業 2
題目 設有乙個線性表 a0,a1,an 2,an 1 存放在單鏈表中。試編寫乙個演算法將該線性表原地逆置,即利用原結點空間置換為 an 1,an 2,a1,a0 並分析該演算法的時間複雜度。1 需求分析 1 用單鏈表存放乙個線性表 a0,a1,an 2,an 1 2 將該線性表原地逆置,即利用原結點...
資料結構作業 佇列
include include using namespace std class linkqueue 連佇列前視說明 class linkqueuenode 節點類的建構函式 private int elem 資料域 linkqueuenode next 指標域 class linkqueue 構...