




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、哈爾濱工業(yè)大學(xué)計算機科學(xué)與技術(shù)學(xué)院實驗報告課程名稱:數(shù)據(jù)結(jié)構(gòu)與算法課程類型:必修實驗項目名稱:二叉樹的應(yīng)用實驗題目:二叉樹的建立、遍歷班級:計算機學(xué)院6班學(xué)號:H090311001姓名:楊瑞設(shè)計成績報告成績指導(dǎo)老師一、實驗?zāi)康恼莆斩鏄涞慕⒎椒?,遞歸和非遞歸的遍歷方法二、實驗要求及實驗環(huán)境實驗要求:以遞歸和非遞歸的方式實現(xiàn)先根,中根,后根遍歷二叉樹的算法;實現(xiàn)層次遍歷二叉樹實驗環(huán)境:GCC編譯器,GDB調(diào)試器三、設(shè)計思想(本程序中的用到的所有數(shù)據(jù)類型的定義,主程序的流程圖及各程序模塊之間的調(diào)用關(guān)系,自己擴展內(nèi)容的等)設(shè)計思想及流程圖:建立二叉樹算法思想:建立二叉樹用戶輸員卜義表形式表示的二叉
2、樹,然后妲立二叉樹;掃描輸入的字符串O若碰到C,則說明前面的是雙親節(jié)點,接下來的事孩子節(jié)點,并用標志位表示;若矗到“),則說明子樹建立結(jié)束,用標志位表示:若謹?shù)剑瑒t說明接下來的是右孩子.同樣用標志位表示;其余情況根據(jù)標志位建立節(jié)點;直到字符串掃描結(jié)束:第法思想:根據(jù)二叉樹的定義和遍歷算法的定義,很容器實現(xiàn)遞歸遍歷的算法。都是用棧實現(xiàn);先If1訪亦并入棧左孩子,重復(fù)直到不存在左孩子:2出枝直到結(jié)點有右孩子.并把當(dāng)前指針指向其右a子。重復(fù)以上兩個步驟:中ft:1入枝左孩子,直到結(jié)點沒有左孩子:2出棧并訪問結(jié)點,如果右孩子存在,則把當(dāng)前指針指向右孩子。重復(fù)以上兩步eit:1入枝左孩子,直到結(jié)點沒有左
3、孩子:2如果棧頂元素沒有右孩子或者右孩子訪問過.則出棧并訪問;如果棧頂元素右孩子存在且沒被訪問過。則當(dāng)前指針指向其右孩子。垂復(fù)以上兩個步驟:用隊列實現(xiàn);將根節(jié)點入隊。1出隊并輸出節(jié)點的值。2若存在左右孩子,則將其入隊。循環(huán)以上兩個步驟,直到隊列為空。算法思想:根據(jù)二殳材的定義,(二叉樹包含左右子樹和根節(jié)點)先刪除左子樹,再硼除右子樹。最后釋放根節(jié)點。仍然是遞歸實現(xiàn)。數(shù)據(jù)類型定義及宏定義:/*malloc容錯函數(shù)的宏定義*/#defineMALLOC(p,s)pmalloc(sizeof(s);if(p=NULL)fprintf(stderr,WrongMemory!n,z):exit(-1);
4、/棧或者隊列的默認容量ttdefineMAXSIZE100/定義數(shù)據(jù)類型typedefcharDataType:定義二叉樹的結(jié)構(gòu)typedefstructBiNode*BiTree;typedefstructBiNodeDataTypedata;BiTreelchild;BiTreerchild;BiNode;函數(shù)集:voidCreate(BiTree込charstr);voidDestroy(BiTree*);voidPreOrderl(BiTree);voidPre0rder2(BiTree);voidInOrderl(BiTree):voidIn0rder2(BiTree):voidPo
5、stOrderl(BiTree);voidPost0rder2(BiTree);voidLevel(BiTree):四、測試結(jié)果測試用例:二叉樹(A(B(D,E(H,I),C(F,G)二叉因薙辛完乎.trntt遞歸遍歷如下ttmm厲先根序歹廠ABDEHICFG呻根序列DBHEIAFCG井后根序列:DHIEBFGGA歸胖非遞歸遍歷如下*#先根序列:ABDEHICFG中根序列:DBHEIAFCG井后根序列:DHIEBFGCA旳曲層次遍歷如下mnmABCDEFGHI二叉樹刪除完畢.Processreturned0Pressanykeytocontinue.executiontime:0-059s五、
6、系統(tǒng)不足與經(jīng)驗體會系統(tǒng)不足:算法效率不是非常高,有待改善經(jīng)驗體會:1棧的用法非常靈活,有的時候不需要定義棧的數(shù)據(jù)類型。只需要用到棧的思想;2遞歸算法都可以用棧和循環(huán)來代替六、附錄:源代碼(帶注釋)/*I數(shù)據(jù)結(jié)構(gòu)實驗二:二叉樹的各種遍歷算法計算機學(xué)院班楊瑞學(xué)號:H0903110012010-12-1320:04:37*/彳includeinclude彳include/*malloc容錯函數(shù)的宏定義*/defineMALLOC(p,s)p=inalloc(sizeof(s);if(p=NULL)fpiintf(stdeiT/WrongMemory!n”);exit(-l);?;蛘哧犃械哪J容量de
7、fineMAXSIZE100/定義數(shù)據(jù)類型typedefcharDataType;/定義二叉樹的結(jié)構(gòu)typedefstrnctBiNode*BiTree;typedefstrnctBiNodeDataTypedata;BiTreelchild;BiTreerchild;BiNode;voidCreate(BiTreejcharsti);voidDestioy(BHYee*);voidPreOrder1(BiTree);voidPreOrder2(BiTree);voidInOrderl(BiTree);voidInOrder2(BiTree);voidPostOrder1(BiTree);vo
8、idPostOrder2(BiTree);voidLevel(BiTree);intmaiii()/printf(H請以廣義表的形式輸入二叉樹:iT);/建立二叉樹并且默認初始化BiTreeBT;Create(&BT,“(A(B(D,E(H,I),C(F,G)”);printfC匸叉樹建立完畢.n“);/以下為遞歸遍歷printf(歸遍歷如下#;printfC#先根序列:8”);PieOrderl(BT);printf(nnn);printf(n#中根序列:nM);IiiOrderl(BT);printf(nnn);printfC*#后根序列:8”);PostOrder1(BT);printf
9、(nnn);printfC1#非遞歸遍歷如下#printfC#先根序列:8”);PieOrder2(BT);printf(nnn);printf(n#中根序列:nM);IiiOrder2(BT);printf(nnn);printfC*#后根序列:8”);PostOrder2(BT);printf(nnn);printfC1#層次遍歷如下Level(BT);printsHnM);/銷毀二叉樹printf(“二叉樹刪除完畢.n”);Destiov(&BT);retiun0;/用廣義表的形式輸入二叉樹,井且建立二叉樹voidCreate(BiTree*BT,chai*sti)charch;BiTr
10、eestackMAXSIZE;定義棧,用于存放指向二叉樹中結(jié)點的指針inttop=0;intflagjc;BiTreep;*BT=NULL.k=0;ch=strk;while(ch!=while(ch!=t)如果字符串沒有結(jié)束while(ch!=while(ch!=t)如果字符串沒有結(jié)束switch(ch)casef:stack卄top=p;flag=l;break;casey:top;break;caseT:flag=2;break;default:MALLOC(p,BiNode);pdata=ch;p-lcliild=NULL;p-rcliild=NULL;if(*BT=NULL)如果是第
11、一個結(jié)點,表示是根結(jié)點*BT=p;elseswitch(flag)case1:stacktop-lcliild=p;break;case2:stacktop-rchild=p;break;ch=str卄k;/銷毀二叉樹,用遞歸的方法voidDestroy(BHYee*BT)Destroy(&(*BT)-lchild);if(*BT)-rcliild)Destioy(&(*BT)-rchild);free(*BT);*BT=NULL;/先根遍歷,遞歸的方法voidPreOrder1(BiTreeBT)iRBT)priiitf(M%cfBT-data);PreOrderl(BT-lchild);P
12、reOrderl(BT-rchild);/中根遍歷,遞歸的方法voidInOrderl(BiTreeBT)iRBT)IiiOrder1(BT-lchild);printf(M%ctH,BT-data);IiiOrder1(BT-rchild);/后根遍歷,遞歸的方法voidPostOrderl(BiTreeBT)iRBT)PostOrderl(BT-lchild);PostOrderl(BT-rchild);printf(M%ctH,BT-data);/先根遍歷,非遞歸的方法voidPreOrder2(BiTreeBT)/定義并且初始化棧BiTreestackMAXSIZE;inttop=0;
13、BiTreep=BT;while(!(p=NULL&top=0)訪問并入棧左孩子,重復(fù)直到不存在左孩子;while(p!=NULL)piiiitf(H%ct,p-data);stacktop+=p;p=plcliild;出棧直到結(jié)點有右孩子,并把當(dāng)前指針指向其右孩子。重復(fù)以上;if(top0)p=stack-top;while(p-rchild=NULL)if(top0)p=stack-top;elsebreak;p=pTchild;中根遍歷,非遞歸的方法voidInOrder2(BiTreeBT)BiTreestackMAXSIZE;inttop=0;BiTreep=BT;while(!(p
14、=NULL&top=0)/入棧左孩子,直到結(jié)點沒有左孩子;while(p!=NULL)stacktop+=p;p=p-lcliild;出棧并訪問結(jié)點,如果右孩子存在,則把當(dāng)前指針指向右孩子。重復(fù)以上兩步;if(top0)p=stack-top;piiiitf(H%ct,p-data);while(p-rchild=NULL)while(p-rchild=NULL)if(top0)p=stack-top;printf(H%ctH,p-data);elsebreak;p=p-rcliild;/后根遍歷,非遞歸的方法voidPostOrder2(BiTreeBT)BiTreestackMAXSIZE
15、;inttop=0;BiTreep=BT;BiTreeq=NULL;while(!(p=NULL&top=0)/入棧左孩子,直到結(jié)點沒有左孩子;xvhile(p!=NULL)stacktop+=p;p=plchild;/如果棧頂元素沒有右孩子或者右孩子訪問過,則出棧并訪問;/如果棧頂元素右孩子存在且沒被訪問過。則當(dāng)前指針指向其右孩子。重復(fù)以上;if(top0)p=stacktop-l;if(p-rcliild=NULL|p-rcliild=q)printfT%cPpdata);top-;q=p;p=NULL;elsep=pXchild;/層次遍歷,用隊列即可voidLevel(BiTreeBT)/定
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 大學(xué)生心理健康課答案智慧樹
- 北京電子病歷管理制度
- 2025年春江蘇開放大學(xué)揚劇表演060895第1-5單元作業(yè)
- 開發(fā)區(qū)投資協(xié)議模板
- 餐廳外賣菜單設(shè)計協(xié)議
- 航空航天材料采購合同
- 購房優(yōu)惠政策協(xié)議
- 食品生產(chǎn)線設(shè)備保養(yǎng)協(xié)議
- 2025至2030年中國三氯叔丁醇行業(yè)投資潛力分析及發(fā)展前景展望報告
- 快樂足球賽事件的回憶作文(5篇)
- R語言數(shù)據(jù)可視化分析報告(附代碼數(shù)據(jù))
- 2024湖南中考物理二輪中考題型研究 專題二 坐標圖像類題專項訓(xùn)練 (含答案)
- 江蘇省無錫市普通高中2023-2024學(xué)年高二下學(xué)期期末調(diào)研考試數(shù)學(xué)試題【含答案】
- 期末質(zhì)量檢測(試題)-2023-2024學(xué)年二年級下冊數(shù)學(xué)西師大版
- 2024年包鋼(集團)公司幼教管理處招聘筆試參考題庫附帶答案詳解
- 1.1 都勻毛尖茶概況
- GB/T 19936.2-2024齒輪FZG試驗程序第2部分:高極壓油的相對膠合承載能力FZG階梯加載試驗A10/16.6R/120
- 胸腔穿刺術(shù)流程圖
- 《生物質(zhì)熱電聯(lián)產(chǎn)工程設(shè)計規(guī)范》
- 康復(fù)設(shè)備一覽表
- JJG 643-2024標準表法流量標準裝置
評論
0/150
提交評論