這個作業屬於哪個課程
這個作業要求在**
/homework/11430
這個作業的目標
《掌握二叉樹的基本特性,掌握二叉樹的先序、中序、後序的遞迴遍歷演算法,理解二叉樹的先序、中序、後序的非遞迴遍歷演算法,通過求二叉樹的深度、葉子結點數和層序遍歷等演算法,理解二叉樹的基本特性》
學號2018204142
二、實驗預習
說明以下概念
1、二叉樹:二叉樹是樹形結構的乙個重要型別。許多實際問題抽象出來的資料結構往往是二叉樹形式,即使是一般的樹也能簡單地轉換為二叉樹,而且二叉樹的儲存結構及其演算法都較為簡單,因此二叉樹顯得特別重要。二叉樹特點是每個結點最多只能有兩棵子樹,且有左右之分。
2、遞迴遍歷:利用數的本身的遞迴定義,採用遞迴方法遍歷。
3、 非遞迴遍歷:採用棧實現,遞迴本身也是用棧實現的遍歷。
4、層序遍歷:按照每一層進行遍歷,需要用佇列來輔助實現。
三、實驗內容和要求
1、閱讀並執行下面程式,根據輸入寫出執行結果,並畫出二叉樹的形態。
#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#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 leafnodes(bitree p)
} int main()
執行結果
4、在上題中補充求二叉樹深度演算法,並在主函式中補充相應的呼叫驗證正確性。
演算法**:
int btnodedepth(bitree p)
}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...