第六次作業

2022-08-11 23:09:19 字數 2561 閱讀 5262

第六次作業:二叉樹

這個作業屬於哪個課程

這個作業要求在**

/homework/11430

這個作業的目標

掌握二叉樹的遞迴和非遞迴遍歷演算法

學號2018204249

一、實驗目的

1、掌握二叉樹的基本特性

2、掌握二叉樹的先序、中序、後序的遞迴遍歷演算法

3、理解二叉樹的先序、中序、後序的非遞迴遍歷演算法

4、通過求二叉樹的深度、葉子結點數和層序遍歷等演算法,理解二叉樹的基本特性

二、實驗預習

說明以下概念

1、二叉樹:

二叉樹(binary tree)是樹形結構的乙個重要型別。許多實際問題抽象出來的資料結構往往是二叉樹形式,即使是一般的樹也能簡單地轉換為二叉樹,而且二叉樹的儲存結構及其演算法都較為簡單,因此二叉樹顯得特別重要。二叉樹特點是每個結點最多只能有兩棵子樹,且有左右之分。

二叉樹是n個有限元素的集合,該集合或者為空、或者由乙個稱為根(root)的元素及兩個不相交的、被分別稱為左子樹和右子樹的二叉樹組成,是有序樹。當集合為空時,稱該二叉樹為空二叉樹。在二叉樹中,乙個元素也稱作乙個結點。

2、遞迴遍歷:

由於二叉樹所具有的遞迴性質,一棵非空的二叉樹可以看作是由根節點、左子樹和右子樹3部分構成,因為若能依次遍歷這3部分的資訊,也就遍歷了整個二叉樹。按照左子樹的遍歷在右子樹的遍歷之前進行的約定,根訪問根節點位置的不同,可以得到二叉的前序、中序、後序3種遍歷方法。

3、 非遞迴遍歷:

不採用遞迴的方式對二叉樹進行遍歷,要採用棧去模擬實現。

4、層序遍歷:

除了先序遍歷、中序遍歷、後序遍歷外,還可以對二叉樹進行層序遍歷。設二叉樹的根節點所在層數為1,層序遍歷就是從所在二叉樹的根節點出發,首先訪問第一層的樹根節點,然後從左到右訪問第2層上的節點,接著是第三層的節點,以此類推,自上而下,自左至右逐層訪問樹的結點的過程就是層序遍歷。

三、實驗內容和要求

1、閱讀並執行下面程式,根據輸入寫出執行結果,並畫出二叉樹的形態。

">#include#include#define max 20

typedef struct btnode*bitree;

void createbitree(bitree *t)

q=(bitree)malloc(sizeof(struct btnode));

if(q==null)

q->data=s;

*t=q;

createbitree(&q->lchild); /*遞迴建立左子樹*/

createbitree(&q->rchild); /*遞迴建立右子樹*/

}void preorder(bitree p)

}void inorder(bitree p)

}void postorder(bitree p)

}void preorder_n(bitree p)

}void release(bitree t)

}int main()

執行程式

輸入:abc##de#g##f###

執行結果:

二叉樹形態

演算法**:

">#include#include#define max 20

typedef struct btnode*bitree;

void createbitree(bitree *t)

q=(bitree)malloc(sizeof(struct btnode));

if(q==null)

q->data=s;

*t=q;

createbitree(&q->lchild); /*遞迴建立左子樹*/

createbitree(&q->rchild); /*遞迴建立右子樹*/

}void preorder(bitree p)

}void inorder(bitree p)

}void postorder(bitree p)

}void preorder_n(bitree p)

}void release(bitree t)

}int preorder_num(bitree p)

return j;

}int main()

執行結果:

int num1=0 ,num2=0;

if(p==null)

return 0;

else if(p->lchild==null&&p->rchild==null)

return 1;

else

} int main()

執行結果:

4、在上題中補充求二叉樹深度演算法,並在主函式中補充相應的呼叫驗證正確性。

int lchilddep,rchilddep;

if(p==null)

return 0;

else

}int main()

執行結果:

四、實驗小結

通過求二叉樹的深度、葉子結點數和層序遍歷等演算法,理解了二叉樹的基本特性,具體**實現仍需加強。

第六次作業

姓名 陳裕坤 學號 120705213 班級 12電信2班 作業1 總結,到目前為止,c語言基礎知識已介紹完,下一階段重點是指標。請從以下幾個方面小結 1.程式設計重在實踐,多程式設計才會對其理解更深,我是如何學習c語言的?2.程式設計涉及到方方面面知識,就像英語單詞一樣,一開始不可能了解每個c元素...

第六次作業

一 問題及 檔名稱 2.cpp 作 者 劉澤 完成日期 2017年5月18日 版 本 號 v1.0 對任務的求解方法及描述部分 輸入描述 問題描述 定義乙個不重複的有初值的10個元素的整數陣列a,利用冒泡法對陣列a排序 1 刪除x 2 插入x 程式輸出 問題分析 用迴圈結構進行編寫 演算法設計 in...

第六次作業

檔名稱 jll.cpp 作 者 謝陽泉 完成日期 2017 年 5 月 19 日 版 本 號 v1.0 對任務及求解方法的描述部分 專案一 陣列操作 輸入描述 略 問題描述 定義乙個不重複的有初值的10個元素的整數陣列a,利用冒泡法對陣列a排序後完成以下操作。程式輸出 3 4 5 6 7 8 9 1...