![二叉樹的基本操作實(shí)驗(yàn)報(bào)告_第1頁(yè)](http://file4.renrendoc.com/view/5d25a3356d0f4207e39ab137088acede/5d25a3356d0f4207e39ab137088acede1.gif)
![二叉樹的基本操作實(shí)驗(yàn)報(bào)告_第2頁(yè)](http://file4.renrendoc.com/view/5d25a3356d0f4207e39ab137088acede/5d25a3356d0f4207e39ab137088acede2.gif)
![二叉樹的基本操作實(shí)驗(yàn)報(bào)告_第3頁(yè)](http://file4.renrendoc.com/view/5d25a3356d0f4207e39ab137088acede/5d25a3356d0f4207e39ab137088acede3.gif)
![二叉樹的基本操作實(shí)驗(yàn)報(bào)告_第4頁(yè)](http://file4.renrendoc.com/view/5d25a3356d0f4207e39ab137088acede/5d25a3356d0f4207e39ab137088acede4.gif)
![二叉樹的基本操作實(shí)驗(yàn)報(bào)告_第5頁(yè)](http://file4.renrendoc.com/view/5d25a3356d0f4207e39ab137088acede/5d25a3356d0f4207e39ab137088acede5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
學(xué)號(hào)姓名實(shí)驗(yàn)日期2012-12-26實(shí)驗(yàn)室計(jì)算機(jī)軟件技術(shù)實(shí)驗(yàn)指導(dǎo)教師設(shè)備編號(hào)401實(shí)驗(yàn)內(nèi)容二叉樹的基本操作一實(shí)驗(yàn)題目實(shí)現(xiàn)二叉樹的基本操作的代碼實(shí)現(xiàn)二實(shí)驗(yàn)?zāi)康?、掌握二叉樹的基本特性2、掌握二叉樹的先序、中序、后序的遞歸遍歷算法3、通過求二叉樹的深度、度為2的結(jié)點(diǎn)數(shù)和葉子結(jié)點(diǎn)數(shù)等算法三實(shí)習(xí)要求(1)認(rèn)真閱讀書上給出的算法(2)編寫程序并獨(dú)立調(diào)試四、給出二叉樹的抽象數(shù)據(jù)類型ADTBinaryTree{//數(shù)據(jù)對(duì)象D:D是具有相同特性的數(shù)據(jù)元素的集合。
//數(shù)據(jù)關(guān)系R:
//若D=Φ,則R=Φ,稱BinaryTree為空二叉樹;
//若D≠Φ,則R={H},H是如下二元關(guān)系;
//(1)在D中存在惟一的稱為根的數(shù)據(jù)元素root,它在關(guān)系H下無前驅(qū);
//(2)若D-{root}≠Φ,則存在D-{root}={D1,Dr},且D1∩Dr=Φ;
//(3)若D1≠Φ,則D1中存在惟一的元素x1,<root,x1>∈H,且存在D1上的關(guān)系H1?H;若Dr≠Φ,則Dr中存在惟一的元素xr,<root,xr>∈H,且存在上的關(guān)系Hr?H;H={<root,x1>,<root,xr>,H1,Hr};
//(4)(D1,{H1})是一棵符合本定義的二叉樹,稱為根的左子樹;(Dr,{Hr})是一棵符合本定義的二叉樹,稱為根的右子樹。//基本操作:
CreateBiTree(&T,definition)
//初始條件:definition給出二叉樹T的定義。
//操作結(jié)果:按definiton構(gòu)造二叉樹T。BiTreeDepth(T)
//初始條件:二叉樹T存在。
//操作結(jié)果:返回T的深度。PreOrderTraverse(T,visit())
//初始條件:二叉樹T存在,Visit是對(duì)結(jié)點(diǎn)操作的應(yīng)用函數(shù)。
//操作結(jié)果:先序遍歷T,對(duì)每個(gè)結(jié)點(diǎn)調(diào)用函數(shù)Visit一次且僅一次。一旦visit()失敗,則操作失敗。InOrderTraverse(T,visit())
//初始條件:二叉樹T存在,Visit是對(duì)結(jié)點(diǎn)操作的應(yīng)用函數(shù)。
//操作結(jié)果:中序遍歷T,對(duì)每個(gè)結(jié)點(diǎn)調(diào)用函數(shù)Visit一次且僅一次。一旦visit()失敗,則操作失敗。PostOrderTraverse(T,visit())
//初始條件:二叉樹T存在,Visit是對(duì)結(jié)點(diǎn)操作的應(yīng)用函數(shù)。
//操作結(jié)果:后序遍歷T,對(duì)每個(gè)結(jié)點(diǎn)調(diào)用函數(shù)Visit一次且僅一次。一旦visit()失敗,則操作失敗。LeafNodes(p)
//初始條件:二叉樹T存在。
//操作結(jié)果:返回T的葉子結(jié)點(diǎn)數(shù)。BothNodes(p)
//初始條件:二叉樹T存在。//操作結(jié)果:返回T的度為2的結(jié)點(diǎn)數(shù)。五、詳細(xì)設(shè)計(jì)1、給出本數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)定義#defineTRUE1#defineFALSE0#defineOK1#defineERROR0#defineNULL0#defineOVERFLOW-22、實(shí)現(xiàn)二叉樹的抽象數(shù)據(jù)類型如下:typedef int Status;typedef char TElemType;定義二叉樹的數(shù)據(jù)元素類型為chr3、存儲(chǔ)實(shí)現(xiàn)的抽象數(shù)據(jù)類型如下:typedef struct BiTNode0120{ TElemType data; struct BiTNode0120 *lchild;//左孩子指針 struct BiTNode0120 *rchild;//右孩子指針}BiTNode0120,*BiTree;4、運(yùn)算的函數(shù)聲明:StatusCreateBiTree0120(BiTreeT,definition)//構(gòu)建二叉樹StatusPreOrder0120(BiTreep)//先序遍歷StatusInOrder0120(BiTreep)//中序遍歷StatusPostOrder0120(BiTreep)//后序遍歷StatusBTNodeDepth0120(BiTreep)//求二叉樹的深度StatusLeafNodes0120(BiTreep,int*i)//求二叉樹葉子結(jié)點(diǎn)的個(gè)數(shù)voidgetDataFromFile0120(charfileName[],BiTree&root);StatusBothNodes0120(BiTreep,int*i)//求度為2的結(jié)點(diǎn)數(shù)5、給出操作實(shí)現(xiàn)的偽碼StatuscreateBiTree0120(BiTree&root,charin[],intbegin1,intend1,charpost[],intbegin2,intend2){//根據(jù)給定的中序序列in,后序序列post,構(gòu)造二叉樹root //其中:begin1,end1分別為叉樹的中序序列在in[]中的開始位置(序號(hào),數(shù)組下標(biāo)+1)、結(jié)束位置;//其中:begin2,end2分別為叉樹的后序序列在post[]中的開始位置(序號(hào),數(shù)組下標(biāo)+1)、結(jié)束位置; charr; inti;intm1;//中序序列中,左子樹根位置 intm2;//后序序列中,左子樹最后一個(gè)結(jié)點(diǎn)位置if(begin1-end1!=begin2-end2)returnERROR; if(end1-begin1>=0){ root=(BiTree)malloc(sizeof(BiTNode)); r=post[end2]; root->data=r;//根 for(i=begin1;i<=end1;i++) if(in[i]==r)break; m1=i-1; m2=begin2+i-begin1-1; root->lchild=NULL; root->rchild=NULL; if(createBiTree0120(root->lchild,in,begin1,m1,post,begin2,m2)==ERROR)//構(gòu)造左子樹 printf("初始化二叉樹出錯(cuò)!\n\n請(qǐng)檢查初始數(shù)據(jù)!\n\n"); if(createBiTree0120(root->rchild,in,m1+2,end1,post,m2+1,end2-1)==ERROR)//構(gòu)造右子樹 printf("初始化二叉樹出錯(cuò)!\n\n請(qǐng)檢查初始數(shù)據(jù)!\n\n");}else{ root=NULL;} returnOK;}voidgetDataFromFile0120(charfileName[],BiTree&root){//從文件fileName中讀取數(shù)據(jù)構(gòu)造二叉樹root FILE*fp; charinOrder0120[100]; charpostOrder0120[100]; inta1,a2,b1,b2; fp=fopen(fileName,"r"); fscanf(fp,"%s\n",inOrder0120);fscanf(fp,"%s\n",postOrder0120); fclose(fp);a1=strlen("inOrder0120:");//中序序列第一個(gè)字符位置 a2=strlen(inOrder0120)-1;;//中序序列最后一個(gè)字符位置b1=strlen("postOrder0120:");//后序序列第一個(gè)字符位置 b2=strlen(postOrder0120)-1;//后序序列最后一個(gè)字符位置 if(createBiTree0120(root,inOrder0120,a1,a2,postOrder0120,b1,b2)==ERROR) printf("初始化二叉樹出錯(cuò)!\n\n請(qǐng)檢查初始數(shù)據(jù)!\n\n"); else printf("初始化二叉樹成功!");}StatusPreOrder0120(BiTreep){//先序遍歷二叉樹if(p!=NULL){ printf("%c",p->data); PreOrder0120(p->lchild); PreOrder0120(p->rchild);} returnOK;}StatusInOrder0120(BiTreep){//中序遍歷二叉樹if(p!=NULL){ InOrder0120(p->lchild); printf("%c",p->data); InOrder0120(p->rchild);} returnOK;}StatusPostOrder0120(BiTreep){//后序遍歷二叉樹if(p!=NULL){ PostOrder0120(p->lchild); PostOrder0120(p->rchild); printf("%c",p->data);}returnOK;}StatusBTNodeDepth0120(BiTreep){//求二叉樹的深度 intlchilddep,rchilddep; if(p==NULL) return0; else{lchilddep=BTNodeDepth0120(p->lchild);rchilddep=BTNodeDepth0120(p->rchild); return(lchilddep>rchilddep)?(lchilddep+1):(rchilddep+1); } returnOK;}StatusLeafNodes0120(BiTreep,int*i){//求二叉樹的葉子結(jié)點(diǎn) intj; if(p!=NULL) { if(p->lchild!=NULL||p->rchild!=NULL) { j=*i; j++; *i=j; } LeafNodes0120(p->lchild,i); LeafNodes0120(p->rchild,i); returnOK; }}StatusBothNodes0120(BiTreep,int*i){//求度為2的結(jié)點(diǎn)數(shù) intj; if(p!=NULL) { if(p->lchild!=NULL&&p->rchild!=NULL) { j=*i; j++; *i=j; } BothNodes0120(p->lchild,i); BothNodes0120(p->rchild,i); returnOK; }}六、實(shí)驗(yàn)環(huán)境1.環(huán)境:宿舍。2.硬件:2048M內(nèi)存,500G硬盤。 3.系統(tǒng):Windows764位操作系統(tǒng)4.軟件平臺(tái):MicrosoftVisualC++6.0簡(jiǎn)體中文版七、相關(guān)文件列表如下demo.cpp:主程序文件bitree.cpp:操作實(shí)現(xiàn)的算法bitree.h:函數(shù)聲明Mydef.h:存儲(chǔ)結(jié)構(gòu)的定義八、程序的運(yùn)行測(cè)試及結(jié)果測(cè)試用例1:構(gòu)造二叉樹測(cè)試用例2:先序遍歷測(cè)試用例3:中序遍歷測(cè)試用例4:后序遍歷測(cè)試用例
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- Unit2 What's the elephant doing(說課稿)-2024-2025學(xué)年外研版(三起)英語(yǔ)四年級(jí)上冊(cè)
- 15《八角樓上》(說課稿)2024-2025學(xué)年-統(tǒng)編版二年級(jí)語(yǔ)文上冊(cè)001
- 7《不甘屈辱奮勇抗?fàn)?圓明園的訴說》(說課稿)統(tǒng)編版道德與法治五年級(jí)下冊(cè)
- 2023七年級(jí)英語(yǔ)下冊(cè) Unit 2 What time do you go to school Section A 第1課時(shí)(1a-2d)說課稿 (新版)人教新目標(biāo)版
- 8大家的“朋友”(說課稿)-部編版道德與法治三年級(jí)下冊(cè)
- 2024-2025學(xué)年高中歷史 第一單元 中國(guó)古代的農(nóng)耕經(jīng)濟(jì) 第5課 農(nóng)耕時(shí)代的商業(yè)與城市(1)教學(xué)說課稿 岳麓版必修2
- 2024年八年級(jí)歷史下冊(cè) 第三單元 第11課 為實(shí)現(xiàn)中國(guó)夢(mèng)而努力奮斗說課稿 新人教版
- 2024年三年級(jí)品社下冊(cè)《學(xué)看平面圖》說課稿 山東版
- 2025三元區(qū)國(guó)有商品林采伐與銷售權(quán)轉(zhuǎn)讓合同書
- Unit 5 Colours Lesson 2 (說課稿)-2024-2025學(xué)年人教新起點(diǎn)版英語(yǔ)一年級(jí)上冊(cè)
- 2024年長(zhǎng)沙衛(wèi)生職業(yè)學(xué)院高職單招職業(yè)技能測(cè)驗(yàn)歷年參考題庫(kù)(頻考版)含答案解析
- 河北省滄州市五縣聯(lián)考2024-2025學(xué)年高一上學(xué)期期末英語(yǔ)試卷(含答案含含聽力原文無音頻)
- 福建省泉州市南安市2024-2025學(xué)年九年級(jí)上學(xué)期期末考試語(yǔ)文試題(無答案)
- 腫瘤護(hù)士培訓(xùn)課件
- 新課標(biāo)體育與健康水平二教案合集
- 2025屆高考語(yǔ)文一輪復(fù)習(xí)知識(shí)清單:古代詩(shī)歌鑒賞
- 醫(yī)療器材申請(qǐng)物價(jià)流程
- 我的消防文員職業(yè)規(guī)劃
- 2025年公司品質(zhì)部部門工作計(jì)劃
- 2024年世界職業(yè)院校技能大賽高職組“市政管線(道)數(shù)字化施工組”賽項(xiàng)考試題庫(kù)
- 華為研發(fā)部門績(jī)效考核制度及方案
評(píng)論
0/150
提交評(píng)論