




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1. 實(shí)驗(yàn)?zāi)康暮蛢?nèi)容:掌握二叉樹基本操作的實(shí)現(xiàn)方法2. 程序分析數(shù)據(jù)結(jié)構(gòu)實(shí) 驗(yàn) 報(bào) 告2.1存儲(chǔ)結(jié)構(gòu)鏈?zhǔn)酱鎯?chǔ)2.程序流程2.3關(guān)鍵算法分析算法一:Create(BiNode<T>* &R,T data口,int i,int n)11算法功能:創(chuàng)建二叉樹2算法基本思想:利用順序存儲(chǔ)結(jié)構(gòu)為輸入,采用先建立根結(jié)點(diǎn),再建立 左右孩子的方法來遞歸建立二叉鏈表的二叉樹【3】 算法空間時(shí)間復(fù)雜度分析:O(n)41代碼邏輯:如果位置小于數(shù)組的長(zhǎng)度則 創(chuàng)建根結(jié)點(diǎn)將數(shù)組的值賦給剛才創(chuàng)建的結(jié)點(diǎn)的數(shù)據(jù)域創(chuàng)建左子樹,如果當(dāng)前結(jié)點(diǎn)位置為i, 則左孩子位置為2i創(chuàng)建右子樹,如果當(dāng)前結(jié)點(diǎn)位置為i, 則右孩
2、子位置為2i+1否則R為空算法二: CopyTree(BiNode<T>*sR,BiNode<T>* &dR)【 1】 算法功能:復(fù)制構(gòu)造函數(shù)【 2】算法基本思想:按照先創(chuàng)建根結(jié)點(diǎn),再遞歸創(chuàng)建左右子樹的方法來實(shí)現(xiàn)?!?3】算法空間時(shí)間復(fù)雜度分析: O( n)【 4】代碼邏輯 :如果源二叉樹根結(jié)點(diǎn)不為空則創(chuàng)建根結(jié)點(diǎn)調(diào)用函數(shù)自身,創(chuàng)建左子樹調(diào)用函數(shù)自身,創(chuàng)建右子樹將該函數(shù)放在復(fù)制構(gòu)造函數(shù)中調(diào)用,就可以實(shí)現(xiàn)復(fù)制構(gòu)造函數(shù)算法三: PreOrder(BiNode<T>*R)【 1】 算法功能:二叉樹的前序遍歷【 2】 算法基本思想:這個(gè)代碼用的是優(yōu)化算法,提前
3、讓當(dāng)前結(jié)點(diǎn)出棧。【 3】 算法空間時(shí)間復(fù)雜度分析: O( n)【 4】 代碼邏輯(偽代碼)如果當(dāng)前結(jié)點(diǎn)為非空,則訪問當(dāng)前結(jié)點(diǎn)當(dāng)前結(jié)點(diǎn)入棧將當(dāng)前結(jié)點(diǎn)的左孩子作為當(dāng)前結(jié)點(diǎn) 如果為空則棧頂結(jié)點(diǎn)出棧則將該結(jié)點(diǎn)的右孩子作為當(dāng)前結(jié)點(diǎn)反復(fù)執(zhí)行這兩個(gè)過程,直到結(jié)點(diǎn)為空并且??账惴ㄋ模?InOrder(BiNode<T>*R)1】 算法功能:二叉樹的中序遍歷2】 算法基本思想:遞歸3】 算法空間時(shí)間復(fù)雜度分析:未知4】 代碼邏輯:如果R為非空:則調(diào)用函數(shù)自身遍歷左孩子訪問該結(jié)點(diǎn)再調(diào)用自身訪問該結(jié)點(diǎn)的右孩子算法五: LevelOrder(BiNode<T>*R)【 1】 算法功能:二叉樹的
4、層序遍歷【 2】 算法基本思想:【 3】 算法空間時(shí)間復(fù)雜度分析: O( n)【 4】 代碼邏輯(偽代碼):若根結(jié)點(diǎn)非空,入隊(duì)如果隊(duì)列不空對(duì)頭元素出隊(duì)訪問該元素若該結(jié)點(diǎn)的左孩子為非空,則左孩子入隊(duì);若該結(jié)點(diǎn)的右孩子為非空,則右孩子入隊(duì);算法六: Count(BiNode<T>*R)【 1】 算法功能:計(jì)算結(jié)點(diǎn)的個(gè)數(shù)【 2】 算法基本思想:遞歸【 3】 算法空間時(shí)間復(fù)雜度分析:未知【 4】 代碼邏輯:如果R不為空的話調(diào)用函數(shù)自身計(jì)算左孩子的結(jié)點(diǎn)數(shù)調(diào)用函數(shù)自身計(jì)算右孩子的結(jié)點(diǎn)數(shù)template<class T>int BiTree<T>:Count(BiNode
5、<T>*R)if(R=NULL)return 0;elseint m=Count(R->lchild);int n=Count(R->rchild);return m+n+1;算法七: Release(BiNode<T>*R)【 1】 算法功能:釋放動(dòng)態(tài)內(nèi)存【 2】 算法基本思想:左右子樹全部釋放完畢后再釋放該結(jié)點(diǎn)【 3】 算法空間時(shí)間復(fù)雜度分析:未知【 4】 代碼邏輯:調(diào)用函數(shù)自身,釋放左子樹調(diào)用函數(shù)自身,釋放右子樹釋放根結(jié)點(diǎn)釋放二叉樹template<class T>void BiTree<T>:Release(BiNode<
6、;T>*R)if(R!=NULL)Release(R->lchild);Release(R->rchild);delete R;template<class T>BiTree<T>:BiTree()Release(root);int main()int a10=1,2,3,4,5,6,7,8,9,10;BiTree<int> BTree(a,10);BiTree<int>Tree(BTree);BTree.PreOrder(BTree.root); cout<<endl;Tree.PreOrder(Tree.root
7、); cout<<endl;BTree.InOrder(BTree.root); cout<<endl;Tree.InOrder(Tree.root); cout<<endl;BTree.PostOrder(BTree.root); cout<<endl;Tree.PostOrder(Tree.root); cout<<endl;BTree.LevelOrder(BTree.root); cout<<endl;Tree.LevelOrder(Tree.root); cout<<endl;int m=BTree.
8、Count(BTree.root); cout<<m<<endl;return 0;3. 測(cè)試數(shù)據(jù):int a10=1,2,3,4,5;1 2 4 5 31 2 4 5 34 2 5 1 34 5 2 3 11 2 3 4 554. 總結(jié):4.1: 這次實(shí)驗(yàn)大多用了遞歸的算法,比較好理解。4.2: 新得體會(huì):在創(chuàng)建二叉樹的過程中,在沒有思路的時(shí)候可以巧妙的利用遞歸算法。但是我的代碼仍然應(yīng)該改進(jìn),應(yīng)該進(jìn)一步簡(jiǎn)化,減少算法的時(shí)間復(fù)雜度和空間復(fù)雜度。#include<iostream>using namespace std;template<class T&
9、gt;class BiNodepublic:T data;BiNode<T>*lchild;BiNode<T>*rchild;template<class T>class BiTreepublic:BiNode<T>*root;BiTree(T data,int n);BiTree(BiTree<T>& r);void PreOrder(BiNode<T>*R);void InOrder(BiNode<T>*R);void PostOrder(BiNode<T>*R);void LevelO
10、rder(BiNode<T>*R);int Count(BiNode<T>*R);BiTree();private:void Create(BiNode<T>* &R,T data,int i,int n);void CopyTree(BiNode<T>*sR,BiNode<T>* &dR);void Release(BiNode<T>*R);template<class T>void BiTree<T>: Create(BiNode<T>* &R,T data,
11、int i,int n)if(i<=n&&datai-1)R=new BiNode<T>R->data=datai-1;Create(R->lchild,data,2*i,n);Create(R->rchild,data,2*i+1,n);else R=NULL;template<class T>BiTree<T>:BiTree(T data,int n)Create(root,data,1,n);template<class T>void BiTree<T>:CopyTree(BiNode&l
12、t;T>*sR,BiNode<T>* &dR) if(sR=NULL)dR=NULL;elsedR=new BiNode<T>dR->data=sR->data;CopyTree(sR->lchild,dR->lchild);CopyTree(sR->rchild,dR->rchild);template<class T>BiTree<T>:BiTree(BiTree<T>& p)CopyTree(p.root,this->root);/this?template<
13、class T>void BiTree<T>:PreOrder(BiNode<T>*R)BiNode<T>*S100;int top=-1;while(top!=-1)|(R!=NULL)if(R!=NULL)cout<<R->data<<"" S+top=R;R=R->lchild;) else ( R=Stop-; R=R->rchild;)template<class T>void BiTree<T>:InOrder(BiNode<T>*R)(if(
14、R!=NULL)(InOrder(R->lchild); cout<<R->data<<"" InOrder(R->rchild);)template<class T>void BiTree<T>: PostOrder(BiNode<T>*R) (if(R!=NULL)(PostOrder(R->lchild); PostOrder(R->rchild); cout<<R->data<<"")template<class T>
15、;void BiTree<T>:LevelOrder(BiNode<T>*R)(BiNode<T>*queue100;int f=0,r=0;if(R!=NULL)queue+r=R;while(f!=r)(BiNode<T>*p=queue+f; cout<<p->data<<" "if(p->lchild!=NULL) queue+r=p->lchild;if(p->rchild!=NULL) queue+r=p->rchild;template<class T&
16、gt;int BiTree<T>:Count(BiNode<T>*R)if(R=NULL)return 0;elseint m=Count(R->lchild);int n=Count(R->rchild);return m+n+1;template<class T>void BiTree<T>:Release(BiNode<T>*R)if(R!=NULL)Release(R->lchild);Release(R->rchild);delete R;template<class T>BiTree<T>:BiTree()Release(root);int main()int a5=1,2,3,4,5;BiTree<int> BTree(a,5);BiTree<int>Tree(BTree);BTree.PreOrder(BTree.root
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 縱隔占位影像診斷
- 工廠承包貨柜方案簡(jiǎn)單
- 原料檢驗(yàn)面試題及答案
- 醫(yī)院感染病例報(bào)告制度與流程
- 腦卒中康復(fù)面試題及答案
- 貨物類投標(biāo)技術(shù)方案
- 首都機(jī)場(chǎng)考試題庫(kù)及答案
- 機(jī)構(gòu)對(duì)外宣傳方案模板
- 小兒結(jié)核病護(hù)理
- 酒店培訓(xùn)內(nèi)容課件
- 2025年中國(guó)水下測(cè)深儀市場(chǎng)調(diào)查研究報(bào)告
- 2025年湖北省中考英語試卷真題(含答案)
- 2023衡水市事業(yè)單位考試歷年真題
- 金鏟鏟教學(xué)課件
- 2025年湖北省工業(yè)建筑集團(tuán)有限公司人員招聘筆試模擬試題附答案詳解
- 四川省金釩科技有限責(zé)任公司巴洞鐵礦開采工程環(huán)評(píng)報(bào)告
- (2025)時(shí)政熱點(diǎn)必考題庫(kù)(附答案)
- 林地轉(zhuǎn)租合同協(xié)議書范本
- 審計(jì)人員廉潔協(xié)議書
- 共同合作融資服務(wù)協(xié)議5篇
- 個(gè)人車位租賃合同(含充電樁安裝)
評(píng)論
0/150
提交評(píng)論