




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、實(shí)驗(yàn)七:二叉樹的拷貝【實(shí)驗(yàn)題目】建立二叉樹類,實(shí)現(xiàn)常用的操作,并且編寫二叉樹復(fù)制成員函數(shù),并在主程序里實(shí)現(xiàn)這 個功能?!靖乓治觥慷鏄涫且环N特殊的樹,意思就是如呆一個結(jié)點(diǎn)有孩子,孩子最多只能有兩個,這樣的 樹就是二叉樹。二叉樹是非常重要的樹形數(shù)據(jù)結(jié)構(gòu)。很多從實(shí)際問題中抽象出來的數(shù)據(jù)是二 叉樹形的;以后我們將看到任意樹或森林可方便地轉(zhuǎn)換成二叉樹,從而為一般樹和森林的存 儲和處理提供了有效方法?!驹敿?xì)設(shè)計(jì)】類圖結(jié)構(gòu)class Class Model /T:classT:classBlnaryTreeT:class# root: BTNode*structBTNode+ element: T+ I
2、Child: BTNodeTstructBTNode+ element: T+ IChild: BTNodeT+ rChild: BTNode*+ BTNodeO+ BTNodeCT&)+ BTNode(T& BTNode BTNode*)楊振飛BinaryTreef)-BinaryTreeO+ BreakTree仃& BinaryTree& BinaryTree&): void+ Clear(): voidClear(BTNode*): void+ Copy(BinaryTree&): voidCopy(BTNode*): BTNode*lnOrder(): voidlnOrder(BTNo
3、de*): void+ IsEmptyO : bool query+ MateTree仃& BinaryTree& BinaryTree&): voidPostOrderQ : voidPostOrder(BTNode): voidPreOrder(): void-PreOrder(BTNode*): void+ Root(T&): bool querySize(): intSize但TNode*): int核心代碼在二叉樹類里建立一個成員函數(shù)BTNode* Copy(BTNode* t);這個函數(shù)使用一個已經(jīng)有的根結(jié)點(diǎn),用遞歸的方法將這個根卞面的所有結(jié)點(diǎn)都拷貝出去,返 回一個新的根結(jié)點(diǎn)。但請
4、注意了,返回的不是二叉樹。因此,要將一個二叉樹拷貝成另一個 二叉樹必要做到以下幾點(diǎn):第一點(diǎn):要有一個已經(jīng)存在的二叉樹,比如說是z第二點(diǎn):要有一個方法(成員函數(shù),比如說定義GetRoot)能夠取得這個已經(jīng)存在的二叉樹 的根。sourRoot=z.GetRoot();第三點(diǎn):定義一個新的結(jié)點(diǎn)desRoot,用來準(zhǔn)備保存拷貝函數(shù)(Copy)得到的新結(jié)點(diǎn)鏈表的 頭。BTNode *desRoot;第四點(diǎn):定義一個新的 一叉樹 BinaryTree desBinaryTree;第五點(diǎn):為二叉樹類編寫一個新的成員函數(shù)SetRoot,將得到的desRoot賦值給這個對彖的 根,這樣的一根嶄新的二叉樹就形成了
5、。程序代碼BinaryTree.h#ifndef BinaryTree_h#define BinaryTree_h#include templatestruct BTNodeBTNode()IChild = rChild = NULL;BTNode(co nst T& x)eleme nt =x;IChild = rChild = NULL;BTNode(constT& x, BTNode* L BTNode* r)eleme nt = x;IChild = l;rChild = r;T element;BTNode* IChild, *rChild;templateclass BinaryT
6、reepublic:BinaryTree()root = NULL;BinaryTreeOfClearO;bool lsEmpty()const;bool Root仃& x)const;void MakeTree(const T& e, BinaryTree& left,BinaryTree& right);void BreakTree仃& e, BinaryTree& left, BinaryTree& right);void PreOrder();void lnOrder();void PostOrder();int Size();void Clear();void Copy(Binary
7、Tree &des);protected:BTNode* root;private:void PreOrder(BTNode* t);void lnOrder(BTNode* t);void PostOrder(BTNode* t);int Size(BTNode* t);void Clear(BTNode* t);BTNode* Copy(BTNode *t);templatevoid BinaryTree:Copy(BinaryTree &des) des.root=Copy(root);templateBTNode* BinaryTree:Copy(BTNode* t)if(It)ret
8、urn NULL;BTNode* q = new BTNode (t-element); q-IChild = Copy(t-IChild);q-rChild = Copy(t-rChild); return q;請補(bǔ)充代碼templatebool BinaryTree:Root(T& x)constif(root)x = root-element;return true;else return false;請完成制造樹和分解樹的代碼templatevoid BinaryTree:MakeTree(const T& e, BinaryTree& left,BinaryTree& right)
9、if(root 11 &left = &right)return;root = new BTNode (e, I eft. root, right.root);left.root = right, root = NULL;templatevoid BinaryTree:BreakTree(T& e, BinaryTree& left, BinaryTree& right)if(!root 11 &left = &right 11 left.root 11 right.root)return;x = root-eleme nt;left.root = root-IChild;right.root
10、 = root-rChild;delete root;root = NULL;templatevoid BinaryTree:PreOrder()PreOrder(root);templatevoid BinaryTree:PreOrder(BTNode* t)if(t)cout(t-eleme nt);PreOrder(t-IChild);PreOrder(t-rChild);templatevoid BinaryTree:lnOrder()InOrder(root); template void BinaryTree:lnOrder(BTNode* t)if(t)lnOrder(t-ICh
11、ild); cout(t-eleme nt);lnOrder(t-rChild);templatevoid BinaryTree:PostOrder()PostOrder(root);templatevoid BinaryTree:PostOrder(BTNode* t) if(t)PostOrder(t-IChild);PostOrder(t-rChild);cout(t-eleme nt);templateint BinaryTree:Size()return Size(root);templateint BinaryTree:Size(BTNode* t)if(!t) return 0;
12、return Size(t-IChild) + Size(t-rChild) + 1; template void BinaryTree:Clear()Clear(root);templatevoid BinaryTree:Clear(BTNode* t)if(t)Clear(t-IChild);Clear(t-rChild);cout delete 11 t-element endl;delete t;BinaryTreeMain.h#inelude BinaryTree.hHint main()BinaryTree abx“z;y.MakeTree(/E,a,b);z.MakeTree(F
13、ab);MakeTree(/C,/y,z);y.MakeTree(/D,a,b);z.MakeTree(B:%x);z.PreOrder();#endif【實(shí)驗(yàn)預(yù)測結(jié)果】二叉樹:經(jīng)過先序遍歷顯示為:BDCEF故實(shí)驗(yàn)正確?!緦?shí)驗(yàn)調(diào)試】 出錯信息:error C2601: PushOperand: local function definitions are illegal解決方案:在return 0語句結(jié)束后加“”【實(shí)驗(yàn)總結(jié)】本次實(shí)驗(yàn)的核心就是二叉樹的拼接與拆解還有拷貝,拼接時要注意的是確保本對彖是空的。 在遍歷的過程中注意選擇的遍歷方式不同,結(jié)果會不同。由于在拼樹時 z.MakeTree( C ,x,y)的順序弄錯了,導(dǎo)致實(shí)驗(yàn)結(jié)果與預(yù)測結(jié)果不同,還有Child的人小 寫沒注意都導(dǎo)致過錯誤的出現(xiàn)?!緦?shí)驗(yàn)
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司貨款擔(dān)保協(xié)議書
- 噴粉工序承包協(xié)議書
- 雙方合作約定協(xié)議書
- 土方開挖外運(yùn)協(xié)議書
- 品牌商標(biāo)加盟協(xié)議書
- 加盟特許經(jīng)營協(xié)議書
- 加盟服裝經(jīng)營協(xié)議書
- 從傳統(tǒng)到未來數(shù)字化對辦公模式的影響及創(chuàng)新策略
- 醫(yī)療爭議和解協(xié)議書
- 在校課后服務(wù)協(xié)議書
- 過程管理的優(yōu)化方法試題及答案
- 地西半球的國家 復(fù)習(xí)課課件-2024-2025學(xué)年七年級地理下學(xué)期(人教版2024)
- 體系文件培訓(xùn)課件
- 路燈勞務(wù)分包合同協(xié)議
- 山東省青島市嶗山區(qū)2024-2025學(xué)年初三下學(xué)年期末考試英語試題試卷含答案
- SF-36生活質(zhì)量調(diào)查表(SF-36-含評分細(xì)則)
- 30題紀(jì)檢監(jiān)察位崗位常見面試問題含HR問題考察點(diǎn)及參考回答
- 光伏電站事故處理規(guī)程
- 銅綠假單胞菌感染和耐藥機(jī)制
- 畢業(yè)論文行星減速器設(shè)計(jì)完稿
- 半波偶極子天線地HFSS仿真設(shè)計(jì)
評論
0/150
提交評論