




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
實驗報告題目:編寫一個二叉樹遍歷演示程序。班級:軟件(2)姓名:===學(xué)號:0925115025完成日期:2011.5.11需求分析1.(1)給出一棵二叉樹的中序與后序遍歷序列,求出它的先序遍歷序列。(2)給出一棵二叉樹的中序與先序遍歷序列,求出它的后序遍歷序列。測試數(shù)據(jù)如下:已知二叉樹的中序與后序序列,求先序序列,請先輸入中序序列,回車后輸入后序序列:例如輸入:DGBAECHFGDBEHFCA輸出:先序遍歷結(jié)果:ABDGCEFH中序遍歷結(jié)果:DGBAECHF后序遍歷結(jié)果:GDBEHFCA已知二叉樹的先序與中序序列,求后序序列,請先輸入先序序列,回車后輸入中序序列:例如輸入:abdefgcdebgfac輸出:先序遍歷結(jié)果:abdefgc中序遍歷結(jié)果:debgfac后序遍歷結(jié)果:edgfbca詳細設(shè)計構(gòu)造二叉樹結(jié)點voidTreeFromMidPost(LPBINARY_TREE_NODE&lpNode,stringmid,stringpost,intlm,intrm,intlp,intrp){//構(gòu)造二叉樹結(jié)點lpNode=newBINARY_TREE_NODE;lpNode->data=post[rp];lpNode->pLeftChild=NULL;lpNode->pRightChild=NULL;intpos=lm;while(mid[pos]!=post[rp]){pos++;}intiLeftChildLen=pos-lm;if(pos>lm)//有左孩子,遞歸構(gòu)造左子樹{TreeFromMidPost(lpNode->pLeftChild,mid,post,lm,pos-1,lp,lp+iLeftChildLen-1);}if(pos<rm)//有右孩子,遞歸構(gòu)造右子樹{TreeFromMidPost(lpNode->pRightChild,mid,post,pos+1,rm,lp+iLeftChildLen,rp-1);}}二叉樹的操作//先序遍歷voidPreOrder(LPBINARY_TREE_NODEp){if(p!=NULL){cout<<p->data;//輸出該結(jié)點PreOrder(p->pLeftChild);//遍歷左子樹PreOrder(p->pRightChild);//遍歷右子樹}}//中序遍歷voidMidOrder(LPBINARY_TREE_NODEp){if(p!=NULL){MidOrder(p->pLeftChild);//遍歷左子樹cout<<p->data;//輸出該結(jié)點MidOrder(p->pRightChild);//遍歷右子樹}}//后序遍歷voidPostOrder(LPBINARY_TREE_NODEp){if(p!=NULL){PostOrder(p->pLeftChild);//遍歷左子樹PostOrder(p->pRightChild);//遍歷右子樹cout<<p->data;//輸出該結(jié)點}}//釋放二叉樹voidRelease(LPBINARY_TREE_NODElpNode){if(lpNode!=NULL){Release(lpNode->pLeftChild);Release(lpNode->pRightChild);deletelpNode;lpNode=NULL;}}完整的程序代碼#include<iostream>#include<string>usingnamespacestd;typedefcharDATA_TYPE;typedefstructtagBINARY_TREE_NODEBINARY_TREE_NODE,*LPBINARY_TREE_NODE;structtagBINARY_TREE_NODE{DATA_TYPEdata;//節(jié)點數(shù)據(jù)LPBINARY_TREE_NODEpLeftChild;//左孩子指針LPBINARY_TREE_NODEpRightChild;//右孩子指針};//函數(shù)功能:給出一棵二叉樹的中序與后序序列,構(gòu)造這棵二叉樹。//輸入?yún)?shù):LPBINARY_TREE_NODE&lpNode:二叉樹的結(jié)點//stringmid:存儲了二叉樹的中序序列的字符串//stringpost:存儲了二叉樹的后序序列的字符串//intlm,intrm:二叉樹的中序序列在數(shù)組mid中的左右邊界//intlp,intrp:二叉樹的后序序列在數(shù)組post中的左右邊界//voidTreeFromMidPost(LPBINARY_TREE_NODE&lpNode,stringmid,stringpost,intlm,intrm,intlp,intrp){//構(gòu)造二叉樹結(jié)點lpNode=newBINARY_TREE_NODE;lpNode->data=post[rp];lpNode->pLeftChild=NULL;lpNode->pRightChild=NULL;intpos=lm;while(mid[pos]!=post[rp]){pos++;}intiLeftChildLen=pos-lm;if(pos>lm)//有左孩子,遞歸構(gòu)造左子樹{TreeFromMidPost(lpNode->pLeftChild,mid,post,lm,pos-1,lp,lp+iLeftChildLen-1);}if(pos<rm)//有右孩子,遞歸構(gòu)造右子樹{TreeFromMidPost(lpNode->pRightChild,mid,post,pos+1,rm,lp+iLeftChildLen,rp-1);}}//函數(shù)功能:給出一棵二叉樹的先序與中序序列,構(gòu)造這棵二叉樹。//輸入?yún)?shù):BINARY_TREE_NODE&lpNode:二叉樹的結(jié)點//stringmid:存儲了二叉樹的中序序列的字符串//stringpre:存儲了二叉樹的先序序列的字符串//intlm,intrm:二叉樹的中序序列在數(shù)組mid中的左右邊界//intlp,intrp:二叉樹的先序序列在數(shù)組pre中的左右邊界//voidTreeFromMidPre(LPBINARY_TREE_NODE&lpNode,stringmid,stringpre,intlm,intrm,intlp,intrp){//構(gòu)造二叉樹結(jié)點lpNode=newBINARY_TREE_NODE;lpNode->data=pre[lp];lpNode->pLeftChild=NULL;lpNode->pRightChild=NULL;intpos=lm;while(mid[pos]!=pre[lp]){pos++;}intiLeftChildLen=pos-lm;if(pos>lm)//有左孩子,遞歸構(gòu)造左子樹{TreeFromMidPre(lpNode->pLeftChild,mid,pre,lm,pos-1,lp+1,lp+iLeftChildLen);}if(pos<rm)//有右孩子,遞歸構(gòu)造右子樹{TreeFromMidPre(lpNode->pRightChild,mid,pre,pos+1,rm,lp+iLeftChildLen+1,rp);}}//先序遍歷voidPreOrder(LPBINARY_TREE_NODEp){if(p!=NULL){cout<<p->data;//輸出該結(jié)點PreOrder(p->pLeftChild);//遍歷左子樹PreOrder(p->pRightChild);//遍歷右子樹}}//中序遍歷voidMidOrder(LPBINARY_TREE_NODEp){if(p!=NULL){MidOrder(p->pLeftChild);//遍歷左子樹cout<<p->data;//輸出該結(jié)點MidOrder(p->pRightChild);//遍歷右子樹}}//后序遍歷voidPostOrder(LPBINARY_TREE_NODEp){if(p!=NULL){PostOrder(p->pLeftChild);//遍歷左子樹PostOrder(p->pRightChild);//遍歷右子樹cout<<p->data;//輸出該結(jié)點}}//釋放二叉樹voidRelease(LPBINARY_TREE_NODElpNode){if(lpNode!=NULL){Release(lpNode->pLeftChild);Release(lpNode->pRightChild);deletelpNode;lpNode=NULL;}}intmain(intargc,char*argv[]){stringpre;//存儲先序序列stringmid;//存儲中序序列stringpost;//存儲后序序列LPBINARY_TREE_NODElpRoot;//二叉樹根節(jié)點指針cout<<"程序1已知二叉樹的中序與后序序列,求先序序列"<<endl;cout<<"請先輸入中序序列,回車后輸入后序序列:"<<endl;cin>>mid;cin>>post;TreeFromMidPost(lpRoot,mid,post,0,mid.size()-1,0,post.size()-1);cout<<"先序遍歷結(jié)果:";PreOrder(lpRoot);cout<<endl;cout<<"中序遍歷結(jié)果:";MidOrder(lp
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新版試用期勞動合同模板合同
- 土地承包合同法律文本示例
- 廠家設(shè)備租賃合同樣本集錦
- 項目合作人才服務(wù)合同
- 茶葉購銷合同模板
- 新產(chǎn)品開發(fā)項目合同協(xié)議書范本
- 保密合同-工作手機保管細則
- 度設(shè)備采購借款合同模板
- 倉儲用房租賃合同參考樣本
- 度醫(yī)療服務(wù)采購合同
- 悟哪吒精神做英雄少年開學(xué)第一課主題班會課件-
- 2025年P(guān)EP人教版小學(xué)三年級英語下冊全冊教案
- 2025年春季學(xué)期教導(dǎo)處工作計劃及安排表
- 2024年江蘇省中小學(xué)生金鑰匙科技競賽(高中組)考試題庫(含答案)
- 2024年個人信用報告(個人簡版)樣本(帶水印-可編輯)
- 16J914-1 公用建筑衛(wèi)生間
- 2024年長沙幼兒師范高等??茖W(xué)校高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫含答案解析
- 計數(shù)的基本原理說課
- 高中學(xué)生秧田式課堂座位管理探究
- 初中花城版八年級下冊音樂6.軍港之夜(15張)ppt課件
- FTTH組網(wǎng)邏輯圖
評論
0/150
提交評論