資料結構作業 7

2021-05-24 15:02:06 字數 1649 閱讀 8052

題目:編寫遞迴演算法,計算二叉樹中葉子結點的數目。

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 構...