




已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
數(shù) 據(jù) 結 構實驗報告實驗名稱: 實驗四 題目1 用二叉鏈表實現(xiàn)一個二叉樹學生姓名: 班 級: 2013211128班內序號: 學 號: 2013210771日 期: 2014/12/051. 實驗目的掌握二叉樹基本操作的實現(xiàn)方法根據(jù)二叉樹的抽象數(shù)據(jù)類型的定義,使用二叉鏈表實現(xiàn)一個二叉樹。二叉樹的基本功能:1、二叉樹的建立2、前序遍歷二叉樹3、中序遍歷二叉樹4、后序遍歷二叉樹5、按層序遍歷二叉樹6、求二叉樹的深度7、求指定結點到根的路徑8、二叉樹的銷毀9、其他:自定義操作編寫測試 main()函數(shù)測試二叉樹的正確性2. 程序分析2.1 存儲結構采用二叉樹的存儲結構,其中每個二叉樹的結點定義了一個結構體,該結構體包含三個元素,分別是一個T類型的數(shù)據(jù)域data,一個指向T類型的指針左孩子,一個指向T類型的指針右孩子。在對二叉樹的關鍵算法的實現(xiàn)過程中,采用了隊列的存儲結構。對于二叉樹中每個結點的data域的賦值,我們事先把這些data儲存在一個數(shù)組中,通過對數(shù)組元素的調用事先對二叉樹中每個結點的data域的賦值。2.2 關鍵算法分析2.2.1二叉樹的建立:A 自然語言描述:1 首先判斷調用的數(shù)組是否為空,如果為空,直接將一個已經(jīng)初始化好的根節(jié)點置為空。2 如果該數(shù)組不為空,則把調用的數(shù)組的第一個元素的賦給根節(jié)點的data域。3 采用遞歸的思想,分別將根節(jié)點的左右孩子作為根節(jié)點,遞歸調用該函數(shù)。完成對左右子樹的賦值。時間復雜度:O(1)B 代碼詳細分析:templatevoid Bitree:create(Binode*&R,T data,int i)/創(chuàng)建二叉樹if(datai-1!=0)R=new Binode; /創(chuàng)建根結點R-data=datai-1;R-lch=R-rch=NULL;create(R-lch,data,2*i); /創(chuàng)建左子樹create(R-rch,data,2*i+1); /創(chuàng)建右子樹template Bitree:Bitree(T data)create(root,data,1); /create root2.2.2前序遍歷二叉樹:A. 自然語言描述:1:判斷根節(jié)點是否為空2:輸出它的data域3:遍歷左子樹4:遍歷右子樹時間復雜度:O(1)B.代碼詳細分析:template void Bitree:preorder(Binode*R) /前序遍歷if(R!=NULL)coutdata; /訪問結點preorder(R-lch); /遍歷左子樹preorder(R-rch); /遍歷右子樹 2.2.3中序遍歷二叉樹:A.自然語言描述:1:判斷根節(jié)點是否為空2:遍歷左子樹3:訪問結點4:遍歷右子樹時間復雜度:O(1)B. 代碼詳細分析:template void Bitree:Inorder(Binode*R) /中序遍歷if(R!=NULL)Inorder(R-lch); /遍歷左子樹coutdata; /訪問結點Inorder(R-rch); /遍歷右子樹2.2.4后序遍歷二叉樹:A.自然語言描述:1:判斷根節(jié)點是否為空2:遍歷左子樹3:遍歷右子樹4:訪問結點時間復雜度:O(1)B.代碼詳細分析:template void Bitree:Postorder(Binode*R) /后序遍歷if(R!=NULL)Postorder(R-lch); /遍歷左子樹Postorder(R-rch); /遍歷右子樹coutdata; /訪問結點2.2.5層序遍歷二叉樹:A.自然語言描述:1:初始化空隊列2:根結點入隊3:隊頭元素出隊4:出隊打印5:左孩子入隊6:右孩子入隊時間復雜度:O(1)B.代碼詳細分析:templatevoid Bitree:Levelorder(Binode*R) /層序遍歷Binode* queue10000;int f=0,r=0; /初始化空隊列if(R!=NULL)queue+r=R; /根結點入隊while(f!=r)Binode*p=queue+f; /隊頭元素出隊coutdata; /出隊打印if(p-lch!=NULL)queue+r=p-lch; /左孩子入隊if(p-rch!=NULL)queue+r=p-rch; /右孩子入隊2.2.6求二叉樹的深度:時間復雜度:O(1)代碼詳細分析:template int Bitree:Depth(Binode *R,int d) /深度if (R=NULL) return d;if (R-lch=NULL) & (R-rch=NULL)return d+1;elseint m = Depth(R-lch,d+1);int n = Depth(R-rch,d+1);return nm? n:m;2.2.7求指定結點到根的路徑時間復雜度:O(n)代碼詳細分析:templatevoid Bitree:path(Binode* root,char m) /求路徑Binode* stack10000;Binode*s;int tag10000;int top=0;s=root;dowhile(s!=NULL)top+;stacktop=s;tagtop=0;s=s-lch;if(top 0)if(tagtop=1)if(stacktop-data=m)cout 路徑: ;for(int i=1;i =top;i+)coutdata;break;top-;Elses=stacktop;if(top 0)s=s-rch;tagtop=1;while(s!=NULL|top!=0);2.2.8銷毀二叉樹時間復雜度:O(1)詳細代碼分析:template void Bitree:Destroy(Binode *R) /銷毀二叉樹if (R!=NULL)Destroy(R-lch);Destroy(R-rch);delete R;template Bitree:Bitree()/銷毀根結點Destroy(root); 3.程序運行結果實現(xiàn)了二叉樹的功能4.總結對二叉樹的操作上,前序遍歷,中序遍歷,后續(xù)遍歷,層序遍歷,求二叉樹深度等函數(shù)采用了遞歸算法。為了提高運算性能,可以將它們改為非遞歸算法來實現(xiàn),對于比較復雜的算法,遞歸和非遞歸的運算時間復雜度差別較大。在實驗中我掌握二叉樹基本操作的實現(xiàn)方法,并且根據(jù)二叉樹的抽象數(shù)據(jù)類型的定義,使用二叉鏈表實現(xiàn)一個二叉樹。源程序:#include using namespace std; template struct Binode T data; Binode *lch; Binode *rch; ; templateclass Bitree private: void create(Binode*&R,T data,int i); /創(chuàng)建二叉樹 void Destroy(Binode *R); public: Binode*root; /根結點 Bitree(T data); /構造函數(shù) Bitree(); void preorder(Binode*R); /前序遍歷 void Inorder(Binode*R); /中序遍歷 void Postorder(Binode*R); /后序遍歷 void Levelorder(Binode*R); /層序遍歷 /*void find(T data);*/ int Depth(Binode *R,int d); /深度 void path(Binode* root,char); Bitree(); /析構函數(shù); templatevoid Bitree:create(Binode*&R,T data,int i) /創(chuàng)建二叉樹 if(datai-1!=0) R=new Binode; /創(chuàng)建根結點 R-data=datai-1; R-lch=R-rch=NULL; create(R-lch,data,2*i); /創(chuàng)建左子樹 create(R-rch,data,2*i+1); /創(chuàng)建右子樹 template Bitree:Bitree(T data) create(root,data,1); /create root template void Bitree:preorder(Binode*R) /前序遍歷 if(R!=NULL) coutdata; /訪問結點 preorder(R-lch); /遍歷左子樹 preorder(R-rch); /遍歷右子樹 template void Bitree:Inorder(Binode*R) /中序遍歷 if(R!=NULL) Inorder(R-lch); /遍歷左子樹 coutdata; /訪問結點 Inorder(R-rch); /遍歷右子樹 template void Bitree:Postorder(Binode*R) /后序遍歷 if(R!=NULL) Postorder(R-lch); /遍歷左子樹 Postorder(R-rch); /遍歷右子樹 coutdata; /訪問結點 template void Bitree:Levelorder(Binode*R) /層序遍歷 Binode* queue10000; int f=0,r=0; /初始化空隊列 if(R!=NULL) queue+r=R; /根結點入隊 while(f!=r) Binode*p=queue+f; /隊頭元素出隊 coutdata; /出隊打印 if(p-lch!=NULL) queue+r=p-lch; /左孩子入隊 if(p-rch!=NULL) queue+r=p-rch; /右孩子入隊 template void Bitree:Destroy(Binode *R) /銷毀二叉樹 if (R!=NULL) Destroy(R-lch); Destroy(R-rch); delete R; template Bitree:Bitree() /銷毀根結點 Destroy(root); template int Bitree:Depth(Binode *R,int d) /深度 if (R=NULL) return d; if (R-lch=NULL) & (R-rch=NULL) return d+1; else int m = Depth(R-lch,d+1); int n = Depth(R-rch,d+1); return nm? n:m; template void Bitree:path(Binode* root,char m) /求路徑 Binode* stack10000; Binode*s; int tag10000; int top=0; s=root; do while(s!=NULL) top+; stacktop=s; tagtop=0; s=s-lch; if(top 0) if(tagtop=1) if(stacktop-data=m) cout 路徑: ; for(int i=1;i =top;i+) coutdata; break; top-; els s=stacktop; if(top 0) s=s-rch; tagtop=1; while(s!=NULL|top!=0); void main() char buf400=0; for(int i = 0;i15;i+) bufi = i+65; Bitree ChBiTree(buf); cout前序遍歷是endl; ChBiTree.preorder(ChBiTree.root); coutendl; cout中序遍歷是
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 遼寧裝備制造職業(yè)技術學院《基礎和聲(一)》2023-2024學年第二學期期末試卷
- 山東省濟寧兗州區(qū)七校聯(lián)考2024-2025學年初三模擬訓練(三)數(shù)學試題含解析
- 江蘇省無錫錫東片2025屆初三語文試題中考模擬試題含解析
- 五邑大學《開放性實驗》2023-2024學年第二學期期末試卷
- 蘆溪縣2025年數(shù)學三下期末統(tǒng)考模擬試題含解析
- 遼寧稅務高等??茖W?!稒C電工程專業(yè)英語》2023-2024學年第一學期期末試卷
- 嘉興職業(yè)技術學院《臨床流行病學》2023-2024學年第二學期期末試卷
- 擔保協(xié)議書的范例二零二五年
- 二零二五場地轉租協(xié)議書
- 知識產權委托代理協(xié)議書二零二五年
- 統(tǒng)編版2024-2025學年語文三年級下冊 期中測試題(含答案)
- 農行反洗錢與制裁合規(guī)知識競賽考試題庫大全-上下
- 2025山東能源集團中級人才庫選拔高頻重點提升(共500題)附帶答案詳解
- 【MOOC】地下鐵道-中南大學 中國大學慕課MOOC答案
- 浙江省慈溪市2023-2024學年六年級下學期期末畢業(yè)考語文試卷
- 我國城市馬拉松賽事發(fā)展現(xiàn)狀分析
- 委托生產及樣品制作通知單.docx
- 貧困戶登記表入戶摸底調查表
- 萬豪酒店前廳部SOP標準運作程序-中文版
- CCTV雨污水管道檢測缺陷內容判斷依據(jù)判斷標準
- 乙烯低溫儲罐安全設計
評論
0/150
提交評論