




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)驗(yàn)七:二叉樹的拷貝【實(shí)驗(yàn)題目】建立二叉樹類,實(shí)現(xiàn)常用的操作,并且編寫二叉樹復(fù)制成員函數(shù),并在主程序里實(shí)現(xiàn)這 個(gè)功能。【概要分析】二叉樹是一種特殊的樹,意思就是如呆一個(gè)結(jié)點(diǎn)有孩子,孩子最多只能有兩個(gè),這樣的 樹就是二叉樹。二叉樹是非常重要的樹形數(shù)據(jù)結(jié)構(gòu)。很多從實(shí)際問題中抽象出來的數(shù)據(jù)是二 叉樹形的;以后我們將看到任意樹或森林可方便地轉(zhuǎn)換成二叉樹,從而為一般樹和森林的存 儲(chǔ)和處理提供了有效方法?!驹敿?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核心代碼在二叉樹類里建立一個(gè)成員函數(shù)BTNode* Copy(BTNode* t);這個(gè)函數(shù)使用一個(gè)已經(jīng)有的根結(jié)點(diǎn),用遞歸的方法將這個(gè)根卞面的所有結(jié)點(diǎn)都拷貝出去,返 回一個(gè)新的根結(jié)點(diǎn)。但請(qǐng)
4、注意了,返回的不是二叉樹。因此,要將一個(gè)二叉樹拷貝成另一個(gè) 二叉樹必要做到以下幾點(diǎn):第一點(diǎn):要有一個(gè)已經(jīng)存在的二叉樹,比如說是z第二點(diǎn):要有一個(gè)方法(成員函數(shù),比如說定義GetRoot)能夠取得這個(gè)已經(jīng)存在的二叉樹 的根。sourRoot=z.GetRoot();第三點(diǎn):定義一個(gè)新的結(jié)點(diǎn)desRoot,用來準(zhǔn)備保存拷貝函數(shù)(Copy)得到的新結(jié)點(diǎn)鏈表的 頭。BTNode *desRoot;第四點(diǎn):定義一個(gè)新的 一叉樹 BinaryTree desBinaryTree;第五點(diǎn):為二叉樹類編寫一個(gè)新的成員函數(shù)SetRoot,將得到的desRoot賦值給這個(gè)對(duì)彖的 根,這樣的一根嶄新的二叉樹就形成了
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;請(qǐng)補(bǔ)充代碼templatebool BinaryTree:Root(T& x)constif(root)x = root-element;return true;else return false;請(qǐng)完成制造樹和分解樹的代碼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ù)測(cè)結(jié)果】二叉樹:經(jīng)過先序遍歷顯示為:BDCEF故實(shí)驗(yàn)正確?!緦?shí)驗(yàn)調(diào)試】 出錯(cuò)信息:error C2601: PushOperand: local function definitions are illegal解決方案:在return 0語(yǔ)句結(jié)束后加“”【實(shí)驗(yàn)總結(jié)】本次實(shí)驗(yàn)的核心就是二叉樹的拼接與拆解還有拷貝,拼接時(shí)要注意的是確保本對(duì)彖是空的。 在遍歷的過程中注意選擇的遍歷方式不同,結(jié)果會(huì)不同。由于在拼樹時(shí) z.MakeTree( C ,x,y)的順序弄錯(cuò)了,導(dǎo)致實(shí)驗(yàn)結(jié)果與預(yù)測(cè)結(jié)果不同,還有Child的人小 寫沒注意都導(dǎo)致過錯(cuò)誤的出現(xiàn)。【實(shí)驗(yàn)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年度河北省保定市部分重點(diǎn)中學(xué)(唐縣第一中學(xué))高一第二學(xué)期期中聯(lián)考?xì)v史試題(含答案)
- 知識(shí)管理與BIM在土木行業(yè)的結(jié)合
- 炸雞店的獨(dú)特配菜搭配分析
- 護(hù)理管理與領(lǐng)導(dǎo)力
- 項(xiàng)目生命周期管理在房地產(chǎn)中的實(shí)踐
- 浙江省溫州市樂清區(qū)2021年人教PEP版小升初測(cè)試英語(yǔ)試卷(解析版)
- 異地津貼與交通補(bǔ)貼政策全解析
- 工程項(xiàng)目溝通中的BIM數(shù)字平臺(tái)
- 春節(jié)的秘密國(guó)潮風(fēng)卡通故事
- 和合谷快餐的品牌營(yíng)銷策略
- 五年級(jí)下學(xué)期數(shù)學(xué)第六單元第5課時(shí)《單元綜合復(fù)習(xí)》課件(共15張PPT)人教版
- 貪污賄賂犯罪PPT(培訓(xùn))(PPT168頁(yè))課件
- (整理)體適能課程教學(xué)計(jì)劃.
- GA∕T 1781-2021 公共安全社會(huì)視頻資源安全聯(lián)網(wǎng)設(shè)備技術(shù)要求
- 洛陽(yáng)市中小學(xué)教師師德師風(fēng)考核內(nèi)容和評(píng)分細(xì)則
- 晶圓封裝測(cè)試工序和半導(dǎo)體制造工藝流程
- 休克的急救護(hù)理課件
- 重力式橋臺(tái)的計(jì)算公式
- 煙草專賣局(公司)系統(tǒng)績(jī)效考核管理辦法(討論稿)
- 項(xiàng)目核算管理辦法(修改)
- 氣動(dòng)油泵的工作原理
評(píng)論
0/150
提交評(píng)論