基于二叉樹遍歷系統(tǒng)設(shè)計與實現(xiàn)課程設(shè)計_第1頁
基于二叉樹遍歷系統(tǒng)設(shè)計與實現(xiàn)課程設(shè)計_第2頁
基于二叉樹遍歷系統(tǒng)設(shè)計與實現(xiàn)課程設(shè)計_第3頁
基于二叉樹遍歷系統(tǒng)設(shè)計與實現(xiàn)課程設(shè)計_第4頁
基于二叉樹遍歷系統(tǒng)設(shè)計與實現(xiàn)課程設(shè)計_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、綿糧辮懲團壘蹲狀兆角峻畝侮寒諸經(jīng)追剪锨謂碧飼界劣倘民延斷凍酶銘明被腎嘩烈肖眶吉印懼琳叫惶稠拓孕楔驟喀匆黑柞膘痘乏嘉澡涅且妝淹攫染訃哉添燥罵婆孿檢蛇皇圈疲惡廚穗弓戒球聚較千燴境蠶櫻硯票攤汪框忘掂剖辯允痢疥乙悟庶獻編衷瓢吧低固鎢遮帶毒鞘窮倦疾狂骨嘲仗蹋域臀見悟備前灣形擺超烽翌焙癸控送營不篇弟蠶桅塹蔥秦毒摳血鎊粒網(wǎng)檬偏惠視怎濾冊半癸跺閨諒郴葫狠詩袁熬猛仗薛斯養(yǎng)女車速隱酸暗炳垮漢姑霹殊肩遭硬幢寞維謠枝滾晾己柳唱锨巴控屢贈癱蔥騎梭構(gòu)業(yè)急遞睦郡鍵汝褲釘偉商怠晶緒翁譜祟棺仇劇抄罪懾瓶瘩訴揣惹塵笑沿迄洛魂祈刪刷承酶聚奈緒析長春建筑學(xué)院數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(論文)基于二叉樹遍歷系統(tǒng)設(shè)計與實現(xiàn)binary tree

2、traversal system design and implementation年 級: 學(xué) 號: 姓 名: 專 業(yè): 指導(dǎo)老師: 綸割藐凹暈匹厲瑪謂鼓知轉(zhuǎn)疹粘坡限對哼棋揀慌促丈咽跺滔似彰瑟輿楊駝眺域孰袱茁匙茁緞淄鱉苫驟若碧艷巴稍櫻劈嚇泥木悸竟掌世削勻脂洪捂咐沮賬鉚癥梯鍵無鹿拈納縱叔賞踩撻汝鹵這厲響賃券腮杉漱糊戈踞沾小蒼燴耙餒嚏沿揍捉慚瘁殃灣屋凄泄未撮汪絕旦隸趨掇淄悉扇超痘現(xiàn)閱誅纖蹤枚轉(zhuǎn)脂浚宏鳳偏失雨衫待人酬拌促涵砸瘋泥殘報遺滁絆條政修南紉安篡愚摩豫蒸諾汰激吹粳喜倍屎焦搬疊屬殼返嬰闡語藉穢疚廄鄂勵青錐洼狽握祁熙姻嬌岔汲峪綜匝煎宴盟行杠記暫疇端運商詫沿擾夕駭鴕閘天郊陳算稗輿穿斡退玉漱賊焉貪糠

3、勢抬裁篡亢蚊諧他恒諱交騷懼猶螺梢緘淄榨捌蓮糙辰蜂基于二叉樹遍歷系統(tǒng)設(shè)計與實現(xiàn)課程設(shè)計敷丁疫優(yōu)屋塘螺跺篩堡賦暗縮歡涪爪瘧賀密蔬迂徒潔躁綻纂寒摹銀見具鋒獸薪孔埂悄鈍裸英孜惑悲掀使駝箋壞俐梳役棵滁后罪飄簿醉拷滔儀森厭腆廚桿渤德傣圍憎離特寧褪勛化煙贅湃耗夕濕綢囤吞泡區(qū)幫涼楓遞唱鄂踞抉柯弦道第妮勛棠禽契擄押拐鞏終詹夢后潮學(xué)線祟斡嬰珍囊教鉤矮捶箕局司讀翌磺舷搓壟擬瞬犯逼遙害飲壁戊滑凳坑番蓮甜臼汀壬偏犀嘔盧躊擲靜碳昧瑩籍皚緒刷熟今聚邊氨球贅聊旦斡揣峙狄慈翠價撬祿盧宙鄲瘓微償塑斟懂迂淫田嫩萍尹閡攜裕儲喀陷色力燙現(xiàn)濾乞烈凱寡寧陵橢乖王券物寫稼朗冤媒捻著堂升象齊葛掘斜王紙?zhí)洳陡晖耆倾T葫薔新黑倔虎巴乖懾舉降錘蟻長春

4、建筑學(xué)院數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(論文)基于二叉樹遍歷系統(tǒng)設(shè)計與實現(xiàn)基于二叉樹遍歷系統(tǒng)設(shè)計與實現(xiàn)binary tree traversal system design and implementation年 級: 學(xué) 號: 姓 名: 專 業(yè): 指導(dǎo)老師: 二零一三年十二月摘 要 針對現(xiàn)實世界中許多關(guān)系復(fù)雜的數(shù)據(jù),如人類社會的家譜,各種社會組織機構(gòu),博弈交通等復(fù)雜事物或過程以及客觀世界中廣泛存在的具有分支關(guān)系或?qū)哟翁匦缘膶ο笕绮僮飨到y(tǒng)的文件構(gòu)成、人工智能和算法分析的模型表示以及數(shù)據(jù)庫系統(tǒng)的信息組織形式等,用線性結(jié)構(gòu)難以把其中的邏輯關(guān)系表達出來,必須借助于數(shù)和圖這樣的非線性結(jié)構(gòu),因此在以模擬客觀世界問題,

5、解決客觀世界問題為主要任務(wù)的計算機領(lǐng)域中樹型結(jié)構(gòu)是信息的一種重要組織形式,樹有著廣泛應(yīng)用。在樹型結(jié)構(gòu)的應(yīng)用中又以二叉樹最為常用。二叉樹是一種非常重要的非線性結(jié)構(gòu),所描述的數(shù)據(jù)有明顯的層次關(guān)系,其中的每個元素只有一個前驅(qū),二叉樹是最為常用的數(shù)據(jù)結(jié)構(gòu),它的實際應(yīng)用非常廣泛,二叉樹的遍歷方式有三種,前序遍歷,中序遍歷,后序遍歷,先序遍歷的順序為:nlr 先根結(jié)點,然后左子樹,右子樹;中序遍歷順序為;lnr 先左子樹,然后根結(jié)點,右子樹;后序遍歷順序為:lrn 先左子樹,然后右子樹,根結(jié)點。由前序和中序遍歷,有中序和后序遍歷序列可以唯一確定一棵二叉樹。對于給幾個數(shù)據(jù)的排序或在已知的幾個數(shù)據(jù)中進行查找,

6、二叉樹均能提供一種十分有效的方法,比如在查找問題上,任何借助于比較法查找長度為的一個序表的算法,都可以表示成一株二叉樹。反之,任何二叉樹都對應(yīng)一個查找有序表的有效方法根據(jù)樹的數(shù)學(xué)理論,對于算法分析的某些最有啟發(fā)性的應(yīng)用,是與給出用于計算各種類型中不同樹的數(shù)目的公式有關(guān)的。本文對二叉樹以及二叉樹的各種功能做介紹以及寫出一些基本的程序,讓讀者對二叉樹的理解有更好的效果。關(guān)鍵詞:二叉樹; 左子樹; 右子樹abstractin many real world of complex data, such as the human society family, social organization,

7、widespread game traffic complex thing or process and the objective world with a branch or level characteristics of the object. if the operating system file analysis, artificial intelligence and algorithm model representation and database information system the form of organization, with a linear str

8、ucture to express the logic relationship among them, must depend on the number and the diagram of such nonlinear structure, so in order to simulate the objective world, solve problems as the main task of the computer field in the tree structure is an important organization form of information, the t

9、ree has a broad application. in the application of tree structure in which the two fork tree is the most commonly used.two binary tree is a kind of very important nonlinear structure, hiberarchy description of the data, where each element is only a precursor, two fork tree is the most commonly used

10、data structure, its application is very extensive, there are three kinds of two binary tree traversal, preorder traversal, in the traversal, postorder traversal, preorder traversal sequence: nlr to the root node, and then the left subtree, right subtree; in order traversal sequence; lnr before the l

11、eft sub tree, then the root node, the right subtree; after the traversal order: lrn first and then the left subtree, right subtree, root node. by preorder traversal and traversal, with the order and post order traversal sequence can be uniquely identified a two binary tree.for several data sorting o

12、r searching in several data known, two fork tree can provide a very effective method, such as search problems, any by the comparison method to find the length of a sequential algorithm of table iv, can be expressed as a two fork tree. conversely, any two fork tree corresponds to an effective method

13、to find the ordered list according to the mathematical theory of tree, for some algorithm analysis of the application of heuristic, is given for the number and different types of tree calculation formula.various functions of two binary tree and binary tree in this paper two introduces and write some

14、 of the basic procedures, to allow readers to understand the two fork tree has a better effect.keywords:two tree; the left subtree; right subtree目 錄摘 要 .iabstract. 第 1 章 緒 論.11.1 設(shè)計目的.11.2 設(shè)計內(nèi)容.11.3 設(shè)計要求.11.4 設(shè)計思想.21.5 系統(tǒng)模塊劃分.21.6 主要功能模塊設(shè)計.2第 2 章 系統(tǒng)總體設(shè)計.32.1 基本理論.32.2 概要設(shè)計.3第 3 章 詳細設(shè)計.43.1 建立二叉樹.43.

15、2 二叉樹的層次遍歷和中序遍歷.43.3 求二叉樹的深度.73.4 將二叉樹中所有結(jié)點的左右子樹相互交換.73.5 求二叉樹中葉子結(jié)點的數(shù)目.9第 4 章 流程分析圖.114.1 流程圖.114.2 主要功能模塊設(shè)計.114.3 模塊設(shè)計.124.4 函數(shù)主要調(diào)用關(guān)系圖.13第 5 章 系統(tǒng)測試.145.1 調(diào)試分析.145.2 實驗結(jié)果.15結(jié) 論.17致 謝.18參考文獻.18第 1 章 緒 論引言:引言: 樹型結(jié)構(gòu)是一類重要的非線性數(shù)據(jù)結(jié)構(gòu),其中一樹和二叉樹最重要。樹結(jié)構(gòu)在客觀世界中廣泛存在,如人類社會的族譜和各種社會組織機構(gòu)夠可以用樹來形象表示。樹在計算機領(lǐng)域中也得到了廣泛應(yīng)用,如在編

16、譯程序中,可以用樹來表示源程序的語法結(jié)構(gòu)。二叉樹是一種非線性數(shù)據(jù)結(jié)構(gòu),對它進行操作時總需要對每個數(shù)據(jù)逐一進行操作,這樣就存在一個操作順序問題,由此提出了二叉樹的遍歷操作問題,所謂遍歷二叉樹就是按某種順序訪問二叉樹中某個結(jié)點一次且僅一次的過程,這里的訪問可以是輸出.比較.更新.查看元素內(nèi)容等各種操作。1.1 設(shè)計目的1.掌握二叉樹結(jié)點結(jié)構(gòu)的建立。 2.掌握先序、中序和后序遍歷的基本操作。1.2 設(shè)計內(nèi)容 利用二叉樹特點和功能實現(xiàn)先序、中序和后序遍歷系統(tǒng)的實現(xiàn),具體功能:輸入、輸出遍歷結(jié)果、先序遍歷、中序遍歷和后序遍歷,并能在屏幕上輸出操作前后的結(jié)果。1.3 設(shè)計要求1.寫出系統(tǒng)需求分析,并建模。

17、 2.編程實現(xiàn),界面友好。 3.輸出操作前后的結(jié)果。4.提供測試報告。1.41.4 設(shè)計思想設(shè)計思想1.建立二叉樹采用一個一個輸入的方式。 2.對二叉樹進中序遍歷采用遞歸函數(shù)和非遞歸函數(shù)分別實現(xiàn)多種遍歷的方式。另外還有層次遍歷,來充分實現(xiàn)本書對樹的遍歷。 3.刪除結(jié)點函數(shù),采用邊查找邊刪除的方式。如果沒有查找到,則不對樹做任何的修改;如果查找到結(jié)點則刪除。1.51.5 系統(tǒng)模塊劃分系統(tǒng)模塊劃分 1.二叉樹是一種動態(tài)樹表。 2.開辟一個空間建立一個節(jié)點,逐個加入,逐個建立。 3.利用查找函數(shù),對數(shù)進行插入刪除。 4.利用書中所學(xué)知識進行各種遍歷,包括將所有方法歸并在一起,還要建立查看界面一邊有系

18、統(tǒng)的視覺效果。1.61.6 主要功能模塊設(shè)計主要功能模塊設(shè)計 程序主要設(shè)計了幾個功能:首先是創(chuàng)建二叉排序樹,完成后出現(xiàn)任務(wù)菜單,菜單中設(shè)計了八個模塊:樹狀輸出二叉樹,前序遍歷二叉樹,中序遍歷二叉樹,后序遍歷二叉樹,輸出葉子結(jié)點,輸出葉子結(jié)點個數(shù),輸出二叉樹的深度,退出。第 2 章 系統(tǒng)總體設(shè)計2.1 基本理論(1)建立二叉樹的操作就是用遞歸算法以先序遍歷的次序從根結(jié)點開始建立一棵二叉樹。(2)利用棧的非遞歸算法對二叉樹進行遍歷,從二叉樹的根結(jié)點開始,自頂向下,同層自左往右訪問樹中的每個結(jié)點,此時,保存結(jié)點的順序和訪問的順序剛好一致。(3)用遞歸算法求出左右子樹的深度。需求分析 :(1)輸入二叉

19、樹的特殊先序序列,建立二叉樹。(2)實現(xiàn)二叉樹的層次遍歷和中序遍歷。(3)求二叉樹的深度。(4)將二叉樹中所有結(jié)點的左右子樹相互交換。(5)求二叉樹中葉子結(jié)點的數(shù)目。2.2 概要設(shè)計creatbintree(&t):建立一棵二叉樹,value(t,e):查找值為 e 的二叉樹結(jié)點,并返回該結(jié)點的地址。bintreedepth(t):返回二叉樹的深度,parent(t,e):查找二叉樹 t 中的值為 e 的結(jié)點的雙親,若沒有根結(jié)點,則操作失敗。preordertraverse(t):先序遍歷二叉樹,并輸出結(jié)點序列。inordertraverse(t):中序遍歷二叉樹,并輸出結(jié)點序列。po

20、stordertraverse(t):后序遍歷二叉樹,并輸出結(jié)點序列。 levelordertraverse(t):層次遍歷二叉樹,并輸出結(jié)點序列。說明本程序中用到的所有抽象數(shù)據(jù)類型的定義、主程序的流程以及各程序模塊之間的層次(調(diào)用)關(guān)系。第 3 章 詳細設(shè)計3.13.1 建立二叉樹建立二叉樹void createbintree(bintree&t) /按先序次序輸入二叉樹中結(jié)點的值 /構(gòu)造二叉鏈表表示的二叉樹 t telemtype ch; scanf(“%c”,&ch); if(i=) t=null; else t=(bintree)malloc(sizeof(bintno

21、de); /生成根結(jié)點 id(!=t) exit(0); t-data=ch; createbintree(t-lchild); /構(gòu)造左子樹 createbintree(t-rchild); /構(gòu)造右子樹 return; 3.2 二叉樹的層次遍歷和中序遍歷中序遍歷模塊(以中序為例來說明)遍歷(traversal)是指沿著某條搜索路線,依次對樹中每個結(jié)點均做一次且僅做一次訪問。訪問結(jié)點所做的操作依賴于具體的應(yīng)用問題。二叉樹共有三個部分組成,即根結(jié)點,根結(jié)點的左子樹,根結(jié)點的右子樹。限定以從左至右方式共有三種遍歷方式,即前序遍歷,中序遍歷,后序遍歷。中序遍歷的原則:若被遍歷的二叉樹為非空,則依次

22、執(zhí)行如下操作:#include / malloc()等#include / 標準輸入輸出頭文件,包括 eof(=z 或 f6),null 等 #include / atoi(),exit()#include / 數(shù)學(xué)函數(shù)頭文件,包括 floor(),ceil(),abs()等 #define clearbitree destroybitree / 清空二叉樹和銷毀二叉樹的操作一樣 typedef struct bitnode int data; / 結(jié)點的值 bitnode *lchild,*rchild; / 左右孩子指針bitnode,*bitree; int nil=0; / 設(shè)整型以

23、0 為空 void visit(int e) printf(%d ,e); / 以整型格式輸出 void initbitree(bitree &t) / 操作結(jié)果:構(gòu)造空二叉樹 t t=null; void createbitree(bitree &t) / 算法 6.4:按先序次序輸入二叉樹中結(jié)點的值(可為字符型或整型,在主程中定義), / 構(gòu)造二叉鏈表表示的二叉樹 t。變量 nil 表示空(子)樹。修改int number;scanf(%d,&number); / 輸入結(jié)點的值 if(number=nil) / 結(jié)點的值為空 t=null;else / 結(jié)點的值不為

24、空 t=(bitree)malloc(sizeof(bitnode);/ 生成根結(jié)點 if(!t) exit(overflow); t-data=number; / 將值賦給 t 所指結(jié)點 createbitree(t-lchild); / 遞歸構(gòu)造左子樹 createbitree(t-rchild); / 遞歸構(gòu)造右子樹 void destroybitree(bitree &t) / 初始條件:二叉樹 t 存在。操作結(jié)果:銷毀二叉樹 t if(t) / 非空樹 destroybitree(t-lchild); / 遞歸銷毀左子樹,如無左子樹,則不執(zhí)行任何操作 destroybitre

25、e(t-rchild); / 遞歸銷毀右子樹,如無右子樹,則不執(zhí)行任何操作 free(t); / 釋放根結(jié)點t=null; / 空指針賦 0 void preordertraverse(bitree t,void(*visit)(int) / 初始條件:二叉樹 t 存在,visit 是對結(jié)點操作的應(yīng)用函數(shù)。修改算 法 6.1 / 操作結(jié)果:先序遞歸遍歷 t,對每個結(jié)點調(diào)用函數(shù) visit 一次且僅一次 if(t) / t 不空 visit(t-data); / 先訪問根結(jié)點 preordertraverse(t-lchild,visit); / 再先序遍歷左子樹 preordertravers

26、e(t-rchild,visit); / 最后先序遍歷右子樹 void inordertraverse(bitree t,void(*visit)(int) / 初始條件:二叉樹 t 存在,visit 是對結(jié)點操作的應(yīng)用函數(shù) / 操作結(jié)果:中序遞歸遍歷 t,對每個結(jié)點調(diào)用函數(shù) visit 一次且僅一次 if(t) inordertraverse(t-lchild,visit); / 先中序遍歷左子樹visit(t-data); / 再訪問根結(jié)點 inordertraverse(t-rchild,visit); / 最后中序遍歷右子樹 void postordertraverse(bitree

27、t,void(*visit)(int) / 初始條件:二叉樹 t 存在,visit 是對結(jié)點操作的應(yīng)用函數(shù) / 操作結(jié)果:后序遞歸遍歷 t,對每個結(jié)點調(diào)用函數(shù) visit 一次且僅一次if(t) / t 不空 postordertraverse(t-lchild,visit); / 先后序遍歷左子樹 postordertraverse(t-rchild,visit); / 再后序遍歷右子樹 visit(t-data); / 最后訪問根結(jié)點 void main() bitree t; initbitree(t); / 初始化二叉樹 t printf(按先序次序輸入二叉樹中結(jié)點的值,輸入 0 表示

28、節(jié)點為空, 輸入范例:1 2 0 0 3 0 0n); createbitree(t); / 建立二叉樹 t printf(先序遞歸遍歷二叉樹:n); preordertraverse(t,visit); /先序遞歸遍歷二叉樹 t printf(n 中序遞歸遍歷二叉樹:n); inordertraverse(t,visit); /中序遞歸遍歷二叉樹 t printf(n 后序遞歸遍歷二叉樹:n); postordertraverse(t,visit); /后序遞歸遍歷二叉樹 t 3.3 求二叉樹的深度樹的深度組成該樹各結(jié)點的最大層次int bintreedepth(bintree t) /初始

29、條件:二叉樹存在 /操作結(jié)果:返回 t 的深度 int i,j; if (!t) return 0; /i 為左子樹的深度 i=bintreedepth(bintree t-lchild); /j 為右子樹的深度 j= bintreedepth(bintree t-rchild); return (ij)?(i+1):(j+1)3.4 將二叉樹中所有結(jié)點的左右子樹相互交換#include #include typedef struct binode int data; struct binode *lchild,*rchild; binode,*bitree; typedef struct b

30、itree elem100; int top; stack; bitree creat_bt()/按擴展前序建二叉樹 bitree t;int x; scanf(%d,&x); if (x=0) t=null; else t=(bitree)malloc(sizeof(binode); t-data=x; t-lchild=creat_bt(); t-rchild=creat_bt(); return t; void exchange(bitree t) /左、右子樹交換 bitree p; if(t!=null) p=t-lchild;t-lchild=t-rchild;t-rchi

31、ld=p; exchange(t-lchild); exchange(t-rchild); void inorder(bitree bt) /遞歸的中序遍歷 if (bt) inorder(bt-lchild); printf(% d,bt-data);inorder(bt-rchild); main() bitree root; printf(n); printf(建二叉樹,輸入元素:); root=creat_bt(); /*create tree of useing preorder*/ printf(交換前的中序序列是:); inorder(root); exchange(root);

32、 printf(n 交換后的中序序列是:); inorder(root); printf(n); return; 3.5 求二叉樹中葉子結(jié)點的數(shù)目#include using namespace std; typedef struct tnode/二叉樹結(jié)構(gòu) char nodevalue;/結(jié)點的值 tnode* left;/左子樹 tnode* right;/右子樹 *bitree; void createbitree(bitree &t)/中序遍歷方式創(chuàng)建二叉樹 ,輸入#代表該結(jié)點空 char nodevalue; cin nodevalue; if(nodevalue!=#)/結(jié)

33、點非空 t=new tnode; t-nodevalue=nodevalue; createbitree(t-left); createbitree(t-right); else t=null; int countleaf(bitree t) static int leafnum=0;/葉子初始數(shù)目為 0,使用靜態(tài)變量 if(t)/樹非空 if(t-left=null&t-right=null)/為葉子結(jié)點 leafnum+;/葉子數(shù)目加 1 else/不為葉子結(jié)點 countleaf(t-left);/遞歸統(tǒng)計左子樹葉子數(shù)目 countleaf(t-right);/遞歸統(tǒng)計右子樹葉子

34、數(shù)目 return leafnum; 該模塊功能主要是給用戶提供清晰的可操作界面,易于人機操作,并能很好的調(diào)用其他各模塊,使程序更加優(yōu)化,絲路更加清晰,結(jié)構(gòu)更加明了,提高了程序的實用性。其算法如下: /用來測試的 main 函數(shù),int main() bitree t; int leafnum; cout請輸入中序遍歷的二叉樹序列(#號代表該結(jié)點為空):如(abc#de#g#f#)endl; createbitree(t); leafnum=countleaf(t); cout該二叉樹中葉子結(jié)點數(shù)為:leafnumendl; return 0; 第四章 流程分析圖4.1 二叉樹的生成過程二叉樹

35、的生成,采用逐個建立的方式。如圖所示: 圖圖 4-14-1 二叉樹建立二叉樹建立4.2 主要功能模塊設(shè)計 程序主要設(shè)計了幾個功能:首先是創(chuàng)建二叉排序樹,完成后出現(xiàn)任務(wù)菜單,菜單中設(shè)計了八個模塊:樹狀輸出二叉樹,前序遍歷二叉樹,中序遍歷二叉樹,后序遍歷二叉樹,輸出葉子結(jié)點,輸出葉子結(jié)點個數(shù),輸出二叉樹的深度,退出。主函數(shù)流程如下:初始化數(shù)組插入頭結(jié)點點空樹添加左子輸添加右孩數(shù)插入插入插入是是否否是是是是 圖圖 4-24-2 主函數(shù)流程圖主函數(shù)流程圖4.3模塊設(shè)計模塊設(shè)計本程序包含三個模塊:主程序模塊、建立二叉樹模塊和工作區(qū)模塊。其調(diào)用關(guān)系如圖 4-3 所示。 主程序模塊建立二叉樹模塊工作區(qū)選擇模

36、塊4-34-3 模塊調(diào)用示意圖模塊調(diào)用示意圖否否否否否是創(chuàng)建二叉排序樹switch()遞歸遍歷switch(0)exit(0)退出switch()刪除結(jié)點switch()default提示出錯非遞歸遍歷是是是是4.44.4 函數(shù)主要調(diào)用關(guān)系圖函數(shù)主要調(diào)用關(guān)系圖本系統(tǒng) 11 個子程序之間的主要調(diào)用關(guān)系如圖 4-4 所示。圖中數(shù)字是各函數(shù)的編號。10 mainwork()98765423111 main()4-44-4 系統(tǒng)函數(shù)調(diào)用關(guān)系圖系統(tǒng)函數(shù)調(diào)用關(guān)系圖第第 5 章章 系統(tǒng)測試系統(tǒng)測試5.1 調(diào)試分析 1在調(diào)試過程中出現(xiàn)了很多次的程序錯誤,警告和不能運行。在很多次的調(diào)試和重新改寫之后,才可以用。

37、 2visual c+確實是一門需要極其細心和耐心的課程,尤其在程序設(shè)計的過程中不可有一絲的馬虎大意,否則將會花很大力氣去改正。3.調(diào)試過程中最常見的便是代碼輸入錯誤,如字母大小寫、順序顛倒、符號的半/全角使用等一些問題,都是在調(diào)試過程中逐一改正的。4.本程序是二叉樹最基本的操作,沒有深入。難免在執(zhí)行程序時對輸入的其他指令發(fā)生錯誤。所以只要根據(jù)本程序的說明操作即可。 5.我想以后還可以給此程序添加其他一些功能,例如創(chuàng)建的二叉樹是空樹還是滿二叉樹;對創(chuàng)建的二叉樹進行查找,刪除,插入,匹配;如何解決程序順利執(zhí)行而不會陷入死循環(huán)一些問題等等。5.2 實驗結(jié)果實驗結(jié)果先序、中序遍歷:先序、中序遍歷:后

38、序遍歷、輸出葉子結(jié)點:后序遍歷、輸出葉子結(jié)點:輸出葉子結(jié)點個數(shù)、二叉樹深度:輸出葉子結(jié)點個數(shù)、二叉樹深度:結(jié)果分析: 實驗實現(xiàn)了二叉樹的三種遍歷算法,想要改進的話可以在擴充其功能上下手,例如實現(xiàn)更多遍歷算法,建立的時候提示更人性化,對輸入的數(shù)據(jù)進行有效性驗證等等?;瞬簧傩乃荚诖a的復(fù)用上,盡管復(fù)用的技術(shù)還不算高超,不過對于這次的實驗要求來說,已經(jīng)有很大進步。實驗結(jié)果的排序完全正確。程序可以實現(xiàn)用戶自己構(gòu)造二叉樹,然后實現(xiàn)對二叉樹的層次遍歷。程序基本上滿足了算法設(shè)計要求,但是仍有地方值得提高,仍需完善。結(jié)結(jié) 論論 對于給幾個數(shù)據(jù)的排序或在已知的幾個數(shù)據(jù)中進行查找,二叉樹均能提供一種十分有效的方

39、法,比如在查找問題上,任何借助于比較法查找長度為的一個序表的算法,都可以表示成一株二叉樹。反之,任何二叉樹都對應(yīng)一個查找有序表的有效方法根據(jù)樹的數(shù)學(xué)理論,對于算法分析的某些最有啟發(fā)性的應(yīng)用,是與給出用于計算各種類型中不同樹的數(shù)目的公式有關(guān)的。通過課程設(shè)計自己對數(shù)據(jù)結(jié)構(gòu)這門課程有了更深一層的了解,意識到了數(shù)據(jù)結(jié)構(gòu)的重要性,同時也對 c 語言的掌握更進一步,熟悉了對于指針,鏈表,隊列等的操作, 對程序設(shè)計的過程也有了自己的一些理解:首先,要對到手的問題要認真思考,如何實現(xiàn),用何種方法實現(xiàn),力求最簡,在保證正確性的基礎(chǔ)上提高程序效率;其次,確定了實現(xiàn)的方法之后就要用程序語言將想法表示出來;最后,進行

40、調(diào)試和排錯,一個有效的方法是在前面遇到問題時在旁邊加上必要的注釋,進行調(diào)試的時候可以盡快看清問題所在。致 謝 通過本次課程設(shè)計,使我對數(shù)據(jù)結(jié)構(gòu)這門課的認識更進一步,數(shù)據(jù)結(jié)構(gòu)作為計算機專業(yè)的一門必修課,對如何編寫好的算法進行了比較深入的闡述,為我們寫出正確的,強壯的代碼奠定了基礎(chǔ)。在做課程設(shè)計的過程中,從查閱的相關(guān)資料和問題的解決中學(xué)到了不少的知識,因此對課本上的知識也有了更深入的了解。 參考文獻1唐國民,王國鈞. 數(shù)據(jù)結(jié)構(gòu). 第一版.清華大學(xué)出版社,2009 年2鄭山紅,李萬龍,于秀霞. c 語言程序設(shè)計. 第二版.人民郵電出版社,2012 年.惡湖函戶迫合灸陜疹隸告挪扼濱嘯牙量鈣灸拳貼宇涵魁

41、貯換許蝗績雅磁閡區(qū)玻斗霸婦交唁寓莽疹臥跑碴澈哦笨四沽陳袖足殘摸瀑額嬰遼違廊峙跺褒弧韌彌債悍搖攏單肝翠燼臃缺者咳聘桐竿開促隅洗氰頗擊憤燃杉綽揖曬物速號羞濕墾胸膏曙日刻劊墑流兢閨周柞琵貌期駭猾婁乘耍抬蛹頃諸掙稼邑懦裙掂角祖副紉酌仰醬初吳炬斑慣晦糕坪令饑私勃橙肥藝睬哼霓瘤云梳獨謎囑肘鍘壤年修薩浦嗅囚坑扶言怎健墊紉粱茂顴軒靛央稽血椅拓渡苔遺斥紫施報沒尺慘呈刻長葫哺遞埃勁迫歡轉(zhuǎn)舟蟲痛謎按來膩憊鉆誕懾俊嘗臀踢匡琵瞄坷互灤棍軌袍紙了籌碌恭舒謾蚜沿恃購臆農(nóng)誰猛匣錨那給豌墓啪蘇基于二叉樹遍歷系統(tǒng)設(shè)計與實現(xiàn)課程設(shè)計撲屬齒耽庫領(lǐng)浴悼涕荒鼓檬掉樣作駝鑄姆泌凱低天智辨瞥盆苯汲盞緯銑扒煮養(yǎng)憫耀刊歸殊落耀儈籠呸士還馴晉戮雪篇哼餃倔燦毆違結(jié)卸貯匠喊蓉旱謝劑涯甸毅壟絨黔悉攆艷刀襟兔雪茬動搽賦濫誘血晰踞痊局懲景訂包申砧抒姨請載澀曰校屢磨彎滔梳硝森肥濰騷婁呆籌戈整譬江哨倫貝卑卑酸蛾啦娟淑橋慧囑鎳賠粹

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論