叉樹的建立和后序遍歷的演示_第1頁
叉樹的建立和后序遍歷的演示_第2頁
叉樹的建立和后序遍歷的演示_第3頁
叉樹的建立和后序遍歷的演示_第4頁
叉樹的建立和后序遍歷的演示_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、9 / 9題 目 : 二叉樹的建立和后序遍歷的演示初始條件: 理論:學(xué)習(xí)了數(shù)據(jù)結(jié)構(gòu)課程,掌握了基本的數(shù)據(jù)結(jié)構(gòu)和常用的算 法;實踐:計算機(jī)技術(shù)系實驗室提供計算機(jī)及軟件開發(fā)環(huán)境。要求完成的主要任務(wù) : (包括課程設(shè)計工作量及其技術(shù)要求, 以及說明書撰寫 等具體要求)1、系統(tǒng)應(yīng)具備的功能:(1)選擇樹的存儲結(jié)構(gòu) , 建立二叉樹(2)用遞歸算法和非遞歸算法實現(xiàn)二叉樹的后序遍歷2、數(shù)據(jù)結(jié)構(gòu)設(shè)計;3、主要算法設(shè)計;4、編程及上機(jī)實現(xiàn);5、撰寫課程設(shè)計報告,包括:(1)設(shè)計題目;(2)摘要和關(guān)鍵字(中文和英文) ;(3)正文,包括引言、需求分析、數(shù)據(jù)結(jié)構(gòu)設(shè)計、算法設(shè)計、程序?qū)崿F(xiàn) 及測試、不足之處、設(shè)計體會等

2、;(4)結(jié)束語;(5)參考文獻(xiàn)。時間安排: 2007年 7月 2日7日 (第 18周)7月 2日 查閱資料7月 3日 系統(tǒng)設(shè)計,數(shù)據(jù)結(jié)構(gòu)設(shè)計,算法設(shè)計7月4日-5 日 編程并上機(jī)調(diào)試7月 6日 撰寫報告7月 7日 驗收程序,提交設(shè)計報告書。指導(dǎo)教師簽名:2007 年 7 月 6 日系主任(或責(zé)任教師)簽名:2007 年 月 日二叉樹的建立和后序遍歷演示計算機(jī) 0502 班周其鳳摘要:該程序的主要部分有:建立一個二叉樹以及二叉樹的后序遍歷算法的演示關(guān)鍵字:二叉樹,左右子樹,根結(jié)點,后序遍歷0.引言設(shè)計不同的結(jié)點結(jié)構(gòu)可構(gòu)成不同形式的鏈?zhǔn)酱鎯Y(jié)構(gòu)。由二叉樹的定義 得知,二叉樹的結(jié)點由一個數(shù)據(jù)元素和分

3、別指向其左、右子樹的兩個分支構(gòu) 成,則表示二叉樹的鏈表中的結(jié)點至少包含三個域:數(shù)據(jù)域和左、右指針域。 利用這種結(jié)點結(jié)構(gòu)所得的二叉樹的存儲結(jié)構(gòu)稱之為二叉鏈表。遍歷二叉樹即如何按某條搜索路徑巡訪樹中每個結(jié)點,使得每個結(jié)點均 被訪問一次,而且僅被訪問一次。后序遍歷二叉樹的操作定義為:若二叉樹為空,則空操作;否則(1)后序遍歷左子樹;(2)后序遍歷右子樹;(3)訪問根結(jié)點。1.需求分析:1.1先序次序輸入建立二叉樹;1.2后序遍歷二叉樹的遞歸算法;1.3后序遍歷二叉樹的非遞歸算法。2 數(shù)據(jù)結(jié)構(gòu)設(shè)計:/ 二叉樹的鏈表存儲表示typedef struct BiTNode char data;struct

4、BiTNode *lchild,*rchild;/ 左右孩子指針BiTNode,*BiTree;/基本操作的函數(shù)原型說明(部分) Status CreateBiTree(BiTree & T);/按先序次序輸入二叉樹中結(jié)點的值(一個字符),空格字符表示空樹/ 構(gòu)造二叉鏈表表示的二叉樹 T.Status PreOrderTraverse(BiTree T,Status(*Visit)(TElemType e);/ 采用二叉鏈表存儲結(jié)構(gòu), Visit 是對結(jié)點操作的應(yīng)用函數(shù)。/先序遍歷二叉樹T,對每個結(jié)點調(diào)用函數(shù)Visit 一次且僅一次/一旦 Visit() 失敗,則操作失敗。Status

5、 inOrderTraverse(BiTree T,Status(*Visit)(TElemType e);/ 采用二叉鏈表存儲結(jié)構(gòu), Visit 是對結(jié)點操作的應(yīng)用函數(shù)。/中序遍歷二叉樹T,對每個結(jié)點調(diào)用函數(shù)Visit 一次且僅一次/ 一旦 Visit() 失敗,則操作失敗。Status PostOrderTraverse(BiTree T,Status(*Visit)(TElemType e);/ 采用二叉鏈表存儲結(jié)構(gòu), Visit 是對結(jié)點操作的應(yīng)用函數(shù)。/后序遍歷二叉樹T,對每個結(jié)點調(diào)用函數(shù)Visit 一次且僅一次/ 一旦 Visit() 失敗,則操作失敗。Status LevelOr

6、derTraverse(BiTree T,Status(*Visit)(TElemType e);/ 采用二叉鏈表存儲結(jié)構(gòu), Visit 是對結(jié)點操作的應(yīng)用函數(shù)。/層次遍歷二叉樹T,對每個結(jié)點調(diào)用函數(shù)Visit 一次且僅一次/ 一旦 Visit() 失敗,則操作失敗。3算法設(shè)計:3.1 先序建立二叉樹這個函數(shù)主要是生成二叉樹。void CreateBiTree(BiTree *T) / 按先序次序輸入二叉樹中結(jié)點的值(一個字符) ,空格字符表示空樹 / 構(gòu)造二叉鏈表表示的二叉樹 T.char ch;ch=treeti+;if(ch=NULL) return;if(ch=' ')

7、 *T=NULL;else *T=(BiTree)malloc(sizeof(BiTNode);(*T)->data=ch; / 生成根結(jié)點CreateBiTree(&(*T)->lchild);/ 構(gòu)造左子樹CreateBiTree(&(*T)->rchild);/ 構(gòu)造右子樹3.2 二叉樹的后序遍歷演示算法:3.2.1 二叉樹的后序遍歷遞歸算法 :void PostOrder(BiTree T) if(T) PostOrder(T->lchild);PostOrder(T->rchild);printf("%c ",T-&g

8、t;data);3.2.2 采用”標(biāo)記棧法“的后序遍歷非遞歸算法( while-whilevoid PostOrder_zb(BiTree t) int tag100,top=0; /*tag為標(biāo)記棧 */BiTree stack100;while(t|top) while(t) stack+top=t;tagtop=0; /* 標(biāo)記棧置為 0:第一次訪問 */ t=t->lchild;if(top) 形式)如果if(tagtop=1) printf("%c ",stacktop->data); -top; /* 這個結(jié)點訪問了兩次,輸出之 */else 否則置

9、棧頂為:第二次訪問 */t=stacktop; /*tagtop=1;t=t->rchild;3.3 源代碼#include <stdio.h>#include <stdlib.h>#include <string.h> char tree30; int ti=0;typedef struct BiTNode char data;struct BiTNode *lchild,*rchild; BiTNode,*BiTree; void CreateBiTree(BiTree *T) char ch;ch=treeti+; if(ch=NULL) ret

10、urn; if(ch=' ') *T=NULL; else *T=(BiTree)malloc(sizeof(BiTNode); (*T)->data=ch;CreateBiTree(&(*T)->lchild); CreateBiTree(&(*T)->rchild);void PostOrder(BiTree T) if(T) PostOrder(T->lchild);PostOrder(T->rchild);printf("%c ",T->data);void PostOrder_zb(BiTree

11、t) int tag100,top=0;BiTree stack100; while(t|top) while(t) stack+top=t; tagtop=0; t=t->lchild;if(top) if(tagtop=1) printf("%c ",stacktop->data); -top; else t=stacktop;tagtop=1;t=t->rchild;mai n() BiTree T=NULL;prin tf("請輸入字符:n");gets(tree);CreateBiTree(&T);prin tf(&q

12、uot;nPostOrder output:");PostOrder(T);prin tf("nPostOrder_zb output:");PostOrder_zb(T);getch();4. 程序運行結(jié)果主界面:輸入字符abde e c f運行結(jié)果:5. 有關(guān)技術(shù)的討論我這個程序主要用了二叉鏈表的生成、分別用遞歸與非遞歸的算法實現(xiàn)了后 序遍歷二叉樹;主要加深了對二叉鏈表的理解,也使我進(jìn)一步認(rèn)識了二叉樹的建 立和遍歷(特別是后序遍歷)的算法實現(xiàn)。6. 設(shè)計體會做程序很累,也很煩,但做好了之后很有成就感,編程中苦樂并行,其中的 苦樂只有自己親身經(jīng)歷后才能真正體會到。 當(dāng)你在修正程序中的一個錯誤而使程 序能夠正常運行時, 那其中的快感是不能有語言表達(dá)的, 真的能讓你感到其樂無 窮。通過這次的課程設(shè)計, 我收獲頗多。這個星期的課程設(shè)計使我對 c 語言中的 一個難點指針有了進(jìn)一步的認(rèn)識, 以前都搞不清楚指針的真正作用, 現(xiàn)在對它 總算是有了一定程度的理解了。還有就是對二叉樹以及二叉鏈表有了一定的認(rèn) 識,二叉樹是數(shù)據(jù)結(jié)構(gòu)中一個基礎(chǔ)且很重要的內(nèi)容, 學(xué)好二叉樹的存儲對以后的 學(xué)習(xí)有很大的幫助; 也使我了解了二叉樹的遍歷算法: 遞歸算法及非遞歸算法的 實現(xiàn)等等。還有最重要的是這次課程設(shè)計是我迄今為止獨立完成的一個

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論