版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上武 漢 工 程 大 學(xué)計算機(jī)科學(xué)與工程學(xué)院數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報告2專業(yè)班級智能01實(shí)驗(yàn)地點(diǎn)機(jī)電大樓4 樓 419 機(jī)房學(xué)生學(xué)號指導(dǎo)教師學(xué)生姓名實(shí)驗(yàn)時間第 12 周第14 周 星期2 實(shí)驗(yàn)項(xiàng)目樹性結(jié)構(gòu)的綜合使用實(shí)驗(yàn)類別操作性() 驗(yàn)證性( ) 設(shè)計性( ) 綜合性( ) 其它( )實(shí)驗(yàn)?zāi)康募耙?.實(shí)現(xiàn)二叉樹的先序,中序與后序遍歷的遞歸算法與非遞歸算法。2.求二叉樹的結(jié)點(diǎn)個數(shù),葉子結(jié)點(diǎn)個數(shù),二叉樹的高度,度為2的結(jié)點(diǎn)個數(shù)。成 績 評 定 表類 別評 分 標(biāo) 準(zhǔn)分值得分合 計上機(jī)表現(xiàn)積極出勤、遵守紀(jì)律認(rèn)真完成設(shè)計任務(wù)30分報告質(zhì)量操作規(guī)范、功能正確填寫完整、體現(xiàn)收獲70分說明:
2、 評閱教師: 日 期: 20 年 月 日實(shí) 驗(yàn) 內(nèi) 容一實(shí)驗(yàn)內(nèi)容1.實(shí)現(xiàn)二叉樹的先序,中序與后序遍歷的遞歸算法與非遞歸算法。2.求二叉樹的結(jié)點(diǎn)個數(shù),葉子結(jié)點(diǎn)個數(shù),二叉樹的高度,度為2的結(jié)點(diǎn)個數(shù)。二程序的設(shè)計思想1實(shí)現(xiàn)二叉樹的先序,中序與后序遍歷的遞歸算法與非遞歸算法。先構(gòu)造二叉樹,根據(jù)先序遍歷的思想,輸入根后,再輸入左子樹,直至左子樹為空則輸入上一層右字樹。(1)二叉樹的非遞歸遍歷是用顯示棧來存儲二叉樹的結(jié)點(diǎn)指針,先序遍歷時,按二叉樹前序遍歷的順序訪問結(jié)點(diǎn),并將結(jié)點(diǎn)的指針入棧,直到棧頂指針指向結(jié)點(diǎn)的左指針域?yàn)榭諘r取出棧頂指針并刪除棧頂指針,訪問剛?cè)〕龅闹羔樦赶虻慕Y(jié)點(diǎn)的右指針指向的結(jié)點(diǎn)并將其指針
3、入棧,如此反復(fù)執(zhí)行則為非遞歸操作。(2)二叉樹的遞歸遍歷:若二叉樹為空,則空操作先序遍歷:(a)訪問根結(jié)點(diǎn); (b)先序遍歷左子樹;(c)先序遍歷右子樹。中序遍歷 : (a)中序遍歷左子樹; (b)訪問根結(jié)點(diǎn);(c)中序遍歷右子樹后序遍歷: (a)后序遍歷左子樹; (b)后序遍歷右子樹; (c)訪問根結(jié)點(diǎn)。2.求二叉樹的結(jié)點(diǎn)個數(shù),葉子結(jié)點(diǎn)個數(shù),二叉樹的高度,度為2的結(jié)點(diǎn)個數(shù)。(1)求二叉樹的葉子結(jié)點(diǎn)個數(shù):先分別求得左右子樹中個葉子結(jié)點(diǎn)的個數(shù),再計算出兩者之和即為二叉樹的葉子結(jié)點(diǎn)數(shù)。(2)二叉樹的結(jié)點(diǎn)個數(shù)之和:先分別求得左子樹右子樹中結(jié)點(diǎn)之和,再計算兩者之和即為所求。(3)二叉樹的高度:首先判斷
4、二叉樹是否為空,若為空則此二叉樹高度為0,。否則,就先分別求出左右子樹的深度進(jìn)行比較,取較大的樹加一即為所求。(4)二叉樹的度為2的結(jié)點(diǎn)個數(shù):計算有左右孩子的結(jié)點(diǎn)個數(shù),即為度為2的結(jié)點(diǎn)個實(shí) 驗(yàn) 內(nèi) 容數(shù)。三編程過程中遇到的問題及解決辦法(1)后續(xù)遍歷的非遞歸函數(shù)涉及到回溯的方法,開始設(shè)計的方案想的太過于簡單,所以形成了死循環(huán),總是在最后的節(jié)點(diǎn)處不停地循環(huán),后改成回溯后,該問題得到解決。(2)計算二叉樹中度為2的結(jié)點(diǎn)個數(shù)中,返回循環(huán)的時候不論根結(jié)點(diǎn)有沒有左右子樹,但個人設(shè)計時,根總是會將自己默認(rèn)為有左右子樹,自行增加1.后在同學(xué)幫助下才看到自己的這個失誤。四程序的閃光點(diǎn)(自我評價)1.程序模塊化
5、,各個函數(shù)分開描述,方便觀察2.關(guān)鍵處有注釋3.建立二叉樹時,用先序提示輸入,比較人性化。 五程序源代碼(以文件為單位提供)#include<iostream.h>#include<malloc.h>#define Maxsize 100typedef struct TREEstruct TREE *lTree;struct TREE *rTree;char data;Tree;void InitTree(Tree*);/初始化樹void CreatTree(Tree*);/創(chuàng)建二叉樹void PreTraverse(Tree*);/先序遍歷遞歸void PreOrde
6、rTraverse(Tree*);/先序遍歷非遞歸void InTraverse(Tree *tree);/中序遍歷遞歸void InOrderTraverse(Tree *tree);/中序遍歷非遞歸void PostTraverse(Tree *tree);/后序遍歷遞歸void LastOrderTraverse(Tree *tree);/后序遍歷非遞歸int DepthTree(Tree *tree);/計算樹的深度int LeafsTree(Tree *tree);/計算葉子結(jié)點(diǎn)個數(shù)int NodesTree(Tree *tree);/計算結(jié)點(diǎn)個數(shù)int Twochild(Tree*
7、tree);/計算度為二的結(jié)點(diǎn)個數(shù)void main()int H,L;Tree tree;/Tree m;InitTree(&tree);CreatTree(&tree);cout<<"先序遍歷遞歸為:"PreTraverse(&tree);/先序遍歷遞歸cout<<"先序遍歷非遞歸:"PreOrderTraverse(&tree);/先序遍歷非遞歸cout<<endl;cout<<"中序遍歷遞歸為:"InTraverse(&tree);/中序遍
8、歷遞歸cout<<"中序遍歷非遞歸:"InOrderTraverse(&tree);/中序遍歷非遞歸cout<<endl;cout<<"后序遍歷遞歸為:"PostTraverse(&tree);/后序遍歷遞歸cout<<"后序遍歷非遞歸:"LastOrderTraverse(&tree);/后序遍歷非遞歸cout<<endl; cout<<"樹的深度為:" H=DepthTree(&tree);cout<&
9、lt;H<<endl;cout<<"葉子結(jié)點(diǎn)個數(shù):"L=LeafsTree(&tree); cout<<L<<endl;cout<<"結(jié)點(diǎn)個數(shù):"cout<<NodesTree(&tree)<<endl;cout<<"度為二的結(jié)點(diǎn)個數(shù)"L=Twochild(&tree);cout<<L<<endl;void InitTree(Tree *tree)/初始化樹tree->lTree=NUL
10、L;tree->rTree=NULL;tree->data='0'void CreatTree(Tree *tree)/創(chuàng)建樹int n=0,m=0,i=0;if(tree->data='0')cout<<"請輸入該節(jié)點(diǎn)的數(shù)據(jù):"cin>>tree->data;cout<<"節(jié)點(diǎn)"<<tree->data<<"是否有左子樹(0:沒有 1:有):"cin>>n;if(n=1)Tree *lTree=(Tr
11、ee*)malloc(sizeof(Tree);tree->lTree=lTree;lTree->lTree=NULL;lTree->rTree=NULL;lTree->data='0'CreatTree(tree->lTree);cout<<"節(jié)點(diǎn)"<<tree->data<<"是否有右子樹(0:沒有 1:有):"cin>>i;if(i=0);else if(i=1)Tree *rTree=(Tree*)malloc(sizeof(Tree);tree-
12、>rTree=rTree;rTree->lTree=NULL;rTree->rTree=NULL;rTree->data='0'CreatTree(tree->rTree);else if(n=0)cout<<"節(jié)點(diǎn)"<<tree->data<<"是否有右子樹(0:沒有 1:有):"cin>>m; if(m=0);else if(m=1)Tree *rTree=(Tree*)malloc(sizeof(Tree);tree->rTree=rTree;
13、rTree->lTree=NULL;rTree->rTree=NULL;rTree->data='0'CreatTree(tree->rTree);void PreTraverse(Tree*tree)/先序遍歷遞歸if(tree!=NULL)cout<<tree->data<<" "if(tree->lTree!=NULL)PreTraverse(tree->lTree);PreTraverse(tree->rTree);else if(tree->rTree!=NULL)Pre
14、Traverse(tree->rTree);else;void PreOrderTraverse(Tree *tree)/先序遍歷非遞歸Tree *S80=NULL;int top =0;while (tree!=NULL)|(top)if (tree!=NULL)cout<<tree->data<<" "top+;Stop = tree; tree = tree->lTree;elsetree = Stop;top-;tree = tree->rTree;void InTraverse(Tree *tree)/中序遍歷遞歸i
15、f(tree!=NULL)if(tree->lTree!=NULL)InTraverse(tree->lTree);cout<<tree->data<<" "InTraverse(tree->rTree);else if(tree->rTree!=NULL)cout<<tree->data<<" "InTraverse(tree->rTree);elsecout<<tree->data<<" "void InOrde
16、rTraverse(Tree *tree)/中序遍歷非遞歸Tree *D80=NULL;int top =0;while (tree!=NULL)|(top)if (tree!=NULL)top+;Dtop = tree; tree = tree->lTree;elsetree = Dtop;top-;cout<<tree->data<<" "tree = tree->rTree;void PostTraverse(Tree *tree)/后序遍歷遞歸if(tree!=NULL)if(tree->lTree!=NULL)Pos
17、tTraverse(tree->lTree);PostTraverse(tree->rTree);cout<<tree->data<<" "else if(tree->rTree!=NULL)PostTraverse(tree->rTree);cout<<tree->data<<" "elsecout<<tree->data<<" "void LastOrderTraverse(Tree *tree)/后序遍歷非遞歸Tre
18、e *stackMaxsize=NULL,*p;p=tree;int top=0,tag=1,i=0,k=0;while(p!=NULL | top)i=1;while(p!=NULL)stack+top=p;p=p->lTree;if(top!=0)p=stacktop->rTree;if(p=NULL)cout<<stacktop->data<<" "if(stacktop!=NULL)while(i)if(stacktop!=NULL)if(stacktop->rTree!=NULL)if(stacktop->rT
19、ree->data=stacktop+1->data)cout<<stacktop->data<<" "elsei=0;elsei=0;elsei=0;if(top!=0)p=stacktop->rTree;elsep=NULL;int DepthTree(Tree *tree) /深度函數(shù) int u,v; if (tree=NULL) return 0; u=DepthTree(tree->lTree); v=DepthTree(tree->rTree); if (u>v) return (u+1); return (v+1); int LeafsTree(Tree *tree)/子葉個數(shù)函數(shù) int num1,num2; if(tree=NULL) return 0; else if(tree->lTree=NULL&
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 航線配船方法課程設(shè)計
- 水利工程師水利工程設(shè)計與運(yùn)維
- 營養(yǎng)科護(hù)士助健康飲食
- 科學(xué)實(shí)驗(yàn)小班班級工作計劃
- 采礦工程行業(yè)工程師的工作總結(jié)
- 家庭用品行業(yè)采購工作總結(jié)
- 餐飲服務(wù)行業(yè)技術(shù)工作總結(jié)
- 醫(yī)藥健康領(lǐng)域科技整合顧問工作總結(jié)
- 冶金行業(yè)行政后勤工作總結(jié)
- 公務(wù)員工作總結(jié)工作成果與貢獻(xiàn)評價
- 【8地RJ期末】安徽省蕪湖市無為市2023-2024學(xué)年八年級上學(xué)期期末地理試題(含解析)
- 2023學(xué)年杭州市十四中高二數(shù)學(xué)(上)期末考試卷附答案解析
- 中國AI+Agent應(yīng)用研究報告
- 五級(程控交換)職業(yè)技能鑒定理論考試題及答案
- 醫(yī)療救護(hù)合作協(xié)議
- 《微元法的應(yīng)用》課件
- 文職-管理學(xué)基礎(chǔ)知識點(diǎn)
- 標(biāo)準(zhǔn)門面租房合同范本
- 《無人機(jī)飛行操控技術(shù)(微課版)》全套教學(xué)課件
- 2023-2024學(xué)年廣東省深圳高級中學(xué)七年級(上)期末歷史試卷
- 2024年房屋租賃補(bǔ)充協(xié)議參考模板(四篇)
評論
0/150
提交評論