


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、數(shù)據(jù)結(jié)構(gòu)與算法統(tǒng)計實(shí)驗(yàn)報告實(shí)驗(yàn)三一、實(shí)驗(yàn)?zāi)康氖煜C環(huán)境,學(xué)會使用C+解決關(guān)于二叉樹的問題。在上機(jī)、調(diào)試的過程中,加強(qiáng)對二叉樹的理解和運(yùn)用。二、實(shí)驗(yàn)內(nèi)容遍歷二叉樹。請輸入一棵二叉樹的擴(kuò)展的前序序列,經(jīng)過處理后生成一棵二叉樹,然后對于該二叉樹輸出前序、中序和后序遍歷序列。三、程序設(shè)計1、概要設(shè)計為實(shí)現(xiàn)上述程序功能,首先需要二叉樹的抽象數(shù)據(jù)結(jié)構(gòu)。二叉樹的抽象數(shù)據(jù)類型定義為:ADT BinaryTree 數(shù)據(jù)對象D:D 數(shù)據(jù)關(guān)系R:D= ,則R= ,稱BinaryTreeD ,則R=H,H在Droot,它在關(guān)系H若D-root,則存在D-root=D1,DrD1Dr =;D1D1D1H1HDrDrx
2、r,H,且存在上的關(guān)系HrH;H=,H1,Hr;(4)(D1,H1)是一棵符合本定義的二叉樹,稱為根的左子樹;(Dr,Hr)是一棵符合本定義的二叉樹,稱為根的右子樹?;静僮鳎篊reatBiTree(BiTree &T)操作結(jié)果:按先序次序建立二叉鏈表表示的二叉樹T PreOrderTraverse(BiTree T,int (*visit)(char e)初始條件:二叉樹T 已經(jīng)存在,visit 是對結(jié)點(diǎn)操作的應(yīng)用函數(shù)操作結(jié)果:先序遍歷二叉樹T ,對每個結(jié)點(diǎn)調(diào)用visit visit()失敗,則操作失敗。InOrderTraverse(BiTree T,int (*visit)(char e
3、)初始條件:二叉樹T 已經(jīng)存在,visit 是對結(jié)點(diǎn)操作的應(yīng)用函數(shù)操作結(jié)果:中序遍歷二叉樹T ,對每個結(jié)點(diǎn)調(diào)用visit visit()失敗,則操作失敗。PostOrderTraverse(BiTree T,int (*visit)(char e)初始條件:二叉樹T 已經(jīng)存在,visit 是對結(jié)點(diǎn)操作的應(yīng)用函數(shù)操作結(jié)果:后序遍歷二叉樹T ,對每個結(jié)點(diǎn)調(diào)用visit visit()失敗,則操作失敗。 ADT BinaryTree2主程序流程主程序先調(diào)用 CreatBiTree(BiTree &T)函數(shù),根據(jù)輸入的先序序列構(gòu)造出一棵二叉樹,再依次調(diào)用PreOrderTraverse(BiTree
4、T,int (*visit)(char e),InOrderTraverse(BiTree T,int (*visit)(char e),PostOrderTraverse(BiTree T,int (*visit)(char 函數(shù),對該二叉樹進(jìn)行先序、中序、后序遍歷并輸出結(jié)果。模塊調(diào)用關(guān)系由主函數(shù)調(diào)用創(chuàng)建模塊,再調(diào)用計算模塊,由計算模塊將結(jié)果輸出。流程圖開始開始按照先序序列構(gòu)造出一棵二叉樹先序遍歷并輸出中序遍歷并輸出后序遍歷并輸出結(jié)束2、詳細(xì)設(shè)計數(shù)據(jù)類型設(shè)計typedef struct BiTNode/二叉樹結(jié)構(gòu)類型char data;/建立數(shù)據(jù)域struct BiTNode *lchild
5、,*rchild;/建立左指針和右指針BiTNode,*BiTree;操作算法設(shè)計int CreatBiTree(BiTree &T)/按先序次序建立二叉鏈表表示的二叉樹Tchar ch; scanf(%c,&ch); if(ch= )3elseT=NULL;T=(BiTNode *)malloc(sizeof(BiTNode); if(!T)exit (OVERFLOW);T-data=ch; CreatBiTree(T-lchild); CreatBiTree(T-rchild);return 1;int visit(char e)/對數(shù)據(jù)進(jìn)行輸出printf(%c,e); return
6、1;int PreOrderTraverse(BiTree T,int (*visit)(char e)/先序遍歷二叉樹T 的遞歸算法if(T)elseif(visit(T-data)if(PreOrderTraverse(T-lchild,visit) if(PreOrderTraverse(T-rchild,visit) return 1;return 0;return 1;int InOrderTraverse(BiTree T,int (*visit)(char e)/中序遍歷二叉樹T 的遞歸算法if(T)if(InOrderTraverse(T-lchild,visit) if(vi
7、sit(T-data)4elsereturn 1;if(InOrderTraverse(T-rchild,visit) return 1;return 0;int PostOrderTraverse(BiTree T,int (*visit)(char e)/后序遍歷二叉樹T 的遞歸算法if(T)elseif(PostOrderTraverse(T-lchild,visit) if(PostOrderTraverse(T-rchild,visit)if(visit(T-data) return 1;return 0;return 1;主函數(shù)設(shè)計void main()/主函數(shù)BiTree T;C
8、reatBiTree(T); 按先序次序建立二叉鏈表表示的二叉樹printf(PreOrderTraverse:n);PreOrderTraverse(T,visit); printf(n);printf(InOrderTraverse:n); InOrderTraverse(T,visit); printf(n);printf(PostOrderTraverse:n); PostOrderTraverse(T,visit); printf(n);四、程序調(diào)試分析調(diào)試時,輸入時有時候有輸出有時候沒輸。向老師請教,老師說是比如abc,則b 下完整的樹。進(jìn)行先序遍歷時,訪問左子樹后程序即結(jié)束,不訪
9、問根結(jié)點(diǎn)和右子樹。后來發(fā)現(xiàn)是return 0return 1的問題。遞歸時return return 5到原位置繼續(xù)執(zhí)行。以后應(yīng)加強(qiáng)對于基礎(chǔ)知識的理解。五、程序運(yùn)行結(jié)果測試一:ABCDE GFPreOrderTraverse: ABCDEGFInOrderTraverse: CBEGDFAPostOrderTraverse: CGEFDBA測試二:12345 76PreOrderTraverse: InOrderTraverse: PostOrderTraverse:六 、 程 序 清 單 #include #include #include #define OVERFLOWtypedef s
10、truct BiTNode/二叉樹結(jié)構(gòu)類型char data;/建立數(shù)據(jù)域struct BiTNode *lchild,*rchild;/建立左指針和右指針BiTNode,*BiTree;int CreatBiTree(BiTree &T);/按先序次序建立二叉鏈表表示的二叉樹T int visit(char e);/對數(shù)據(jù)進(jìn)行輸出int PreOrderTraverse(BiTree T,int (*visit)(char e);/ int InOrderTraverse(BiTree T,int (*visit)(char e);/ /序遍歷二叉樹T 序遍歷二叉樹T 的遞歸算法int Po
11、stOrderTraverse(BiTree T,int (*visit)(char e);/ /序遍歷二叉樹T 的遞歸算法void main()/主函數(shù)BiTree T;CreatBiTree(T); 按先序次序建立二叉鏈表表示的二叉樹printf(PreOrderTraverse:n);6PreOrderTraverse(T,visit); printf(n);printf(InOrderTraverse:n); InOrderTraverse(T,visit); printf(n);printf(PostOrderTraverse:n); PostOrderTraverse(T,visi
12、t); printf(n);int CreatBiTree(BiTree &T)/按先序次序建立二叉鏈表表示的二叉樹Tchar ch; scanf(%c,&ch); if(ch= )elseT=NULL;T=(BiTNode *)malloc(sizeof(BiTNode); if(!T)exit (OVERFLOW);T-data=ch; CreatBiTree(T-lchild); CreatBiTree(T-rchild);return 1;int visit(char e)/對數(shù)據(jù)進(jìn)行輸出printf(%c,e); return 1;int PreOrderTraverse(BiTre
13、e T,int (*visit)(char e)/ /序遍歷二叉樹T 的遞歸算法if(T)if(visit(T-data)if(PreOrderTraverse(T-lchild,visit)7elsereturn 1;if(PreOrderTraverse(T-rchild,visit) return 1;return 0;int InOrderTraverse(BiTree T,int (*visit)(char e)/ /序遍歷二叉樹T 的遞歸算法if(T)elseif(InOrderTraverse(T-lchild,visit) if(visit(T-data)if(InOrderTraverse(T-rchild,visit) return 1;retur
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年非甾體抗炎藥物合作協(xié)議書
- 銷售代理合作協(xié)議獨(dú)家渠道政策
- 網(wǎng)絡(luò)服務(wù)訂購協(xié)議及用戶使用規(guī)范
- 個人公司借款合同
- 農(nóng)村家庭養(yǎng)殖場合作建設(shè)與管理協(xié)議
- 高校在線課程資源共享平臺合作協(xié)議
- 2025年地?zé)岢捌黜?xiàng)目合作計劃書
- 無人機(jī)飛行服務(wù)風(fēng)險免責(zé)協(xié)議
- 管理心理學(xué)在高管培訓(xùn)中的效用試題及答案
- 個人包車包司機(jī)協(xié)議書
- 新生兒早期基本保健(EENC)指南要點(diǎn)解讀課件
- 超星爾雅學(xué)習(xí)通《工程倫理》章節(jié)測試答案
- 酒精中毒性韋尼克腦病與酒精戒斷模板課件整理
- 進(jìn)行性肌營養(yǎng)不良癥-課件
- 勞動仲裁個人委托書(通用7篇)
- 幼兒園大班科學(xué):《樹葉為什么會變黃》課件
- 醫(yī)院質(zhì)控辦工作職責(zé)、人員崗位職責(zé)
- 公司職工創(chuàng)新創(chuàng)效項(xiàng)目申報表
- 鐵路路基大維修規(guī)則
- 藥品生產(chǎn)質(zhì)量管理規(guī)范(2010版)(含13個附錄)
- 高校教學(xué)課件:旅游文化學(xué)
評論
0/150
提交評論