![數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告-二叉樹的實(shí)現(xiàn)與遍歷_第1頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/27/f339fabb-6e92-4b71-8578-b1b546c429d3/f339fabb-6e92-4b71-8578-b1b546c429d31.gif)
![數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告-二叉樹的實(shí)現(xiàn)與遍歷_第2頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/27/f339fabb-6e92-4b71-8578-b1b546c429d3/f339fabb-6e92-4b71-8578-b1b546c429d32.gif)
![數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告-二叉樹的實(shí)現(xiàn)與遍歷_第3頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/27/f339fabb-6e92-4b71-8578-b1b546c429d3/f339fabb-6e92-4b71-8578-b1b546c429d33.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、數(shù)據(jù)結(jié)構(gòu)第六次實(shí)驗(yàn)報(bào)告學(xué)生姓名學(xué)生班級學(xué)生學(xué)號(hào)指導(dǎo)老師1重慶郵電大學(xué)計(jì)算機(jī)學(xué)院計(jì)算機(jī)專業(yè)實(shí)驗(yàn)中心一、實(shí)驗(yàn)內(nèi)容1)采用二叉樹鏈表作為存儲(chǔ)結(jié)構(gòu),完成二叉樹的建立,先序、中序和后序以及按層次遍歷的操作,求所有葉子及結(jié)點(diǎn)總數(shù)的操作。2)輸出樹的深度,最大元,最小元。二、需求分析遍歷二叉樹首先有三種方法,即先序遍歷,中序遍歷和后序遍歷。遞歸方法比較簡單,首先獲得結(jié)點(diǎn)指針如果指針不為空,且有左子,從左子 遞歸到下一層,如果沒有左子,從右子遞歸到下一層,如果指針為空,則結(jié) 束一層遞歸調(diào)用。直到遞歸全部結(jié)束。下面重點(diǎn)來講述非遞歸方法:首先介紹先序遍歷:先序遍歷的順序是根 左右,也就是說先訪問根結(jié)點(diǎn)然后訪問其左
2、子再然后 訪問其右子。具體算法實(shí)現(xiàn)如下:如果結(jié)點(diǎn)的指針不為空,結(jié)點(diǎn)指針入棧, 輸出相應(yīng)結(jié)點(diǎn)的數(shù)據(jù),同時(shí)指針指向其左子,如果結(jié)點(diǎn)的指針為空,表示左 子樹訪問結(jié)束,棧頂結(jié)點(diǎn)指針出棧,指針指向其右子,對其右子樹進(jìn)行訪問, 如此循環(huán),直至結(jié)點(diǎn)指針和棧均為空時(shí),遍歷結(jié)束。再次介紹中序遍歷:中序遍歷的順序是左 根右,中序遍歷和先序遍歷思想差不多,只是打印順 序稍有變化。具體實(shí)現(xiàn)算法如下:如果結(jié)點(diǎn)指針不為空,結(jié)點(diǎn)入棧,指針指 向其左子,如果指針為空,表示左子樹訪問完成,則棧頂結(jié)點(diǎn)指針出棧,并 輸出相應(yīng)結(jié)點(diǎn)的數(shù)據(jù),同時(shí)指針指向其右子,對其右子樹進(jìn)行訪問。如此循 環(huán)直至結(jié)點(diǎn)指針和棧均為空,遍歷結(jié)束。最后介紹后序
3、遍歷:后序遍歷的順序是左 右 根,后序遍歷是比較難的一種,首先需要建立兩個(gè) 棧,一個(gè)用來存放結(jié)點(diǎn)的指針,另一個(gè)存放標(biāo)志位,也是首先訪問根結(jié)點(diǎn), 如果結(jié)點(diǎn)的指針不為空,根結(jié)點(diǎn)入棧,與之對應(yīng)的標(biāo)志位也隨之入標(biāo)志位棧, 并賦值0,表示該結(jié)點(diǎn)的右子還沒有訪問,指針指向該結(jié)點(diǎn)的左子,如果結(jié) 點(diǎn)指針為空,表示左子訪問完成,父結(jié)點(diǎn)出棧,與之對應(yīng)的標(biāo)志位也隨之出 棧,如果相應(yīng)的標(biāo)志位值為0,表示右子樹還沒有訪問,指針指向其右子, 父結(jié)點(diǎn)再次入棧,與之對應(yīng)的標(biāo)志位也入棧,但要給標(biāo)志位賦值為1,表示右子訪問過。如果相應(yīng)的標(biāo)志位值為 1,表示右子樹已經(jīng)訪問完成,此時(shí)要 輸出相應(yīng)結(jié)點(diǎn)的數(shù)據(jù),同時(shí)將結(jié)點(diǎn)指針賦值為空,如
4、此循環(huán)直至結(jié)點(diǎn)指針和 棧均為空,遍歷結(jié)束。三、詳細(xì)設(shè)計(jì)源代碼:#include<>#define MAX 100 /表示棧的最大容量#define FULL 99表示棧滿#define EMPTY -1 表示棧空typedef struct Tnode /定義結(jié)點(diǎn)char data;/存儲(chǔ)結(jié)點(diǎn)數(shù)據(jù)struct Tnode *left;定義結(jié)點(diǎn)左子指針struct Tnode *right;定義右子指針Tnode,*Pnode; 聲明Tnode類型的變量和指針 typedef struct Stack/ 定義棧Pnode pnodeMAX; 存放數(shù)據(jù)int p;/棧頂指針Stack,
5、*Pstack;定義Stack類型的變量和指針void Push (Pstack pstack,Pnode pnode)/ 入棧 pstack->p +;pstack->pnodepstack->p = pnode;/ 賦值Pnode Pop(Pstack pstack)/ 出棧return pstack->pnodepstack->p-;Pnode Top (Pstack pstack)/看棧頂元素return pstack->pnodepstack->p;int Isempty (Pstack pstack)/棧判空if(pstack->p=
6、EMPTY)return 1;elsereturn 0;int Isfull (Pstack pstack )/棧滿if (pstack ->p=FULL)return 1;elsereturn 0;void Initstack (Pstack pstack)/初始化棧pstack->p=EMPTY;初始化結(jié)點(diǎn)void lnittnode(Pnode root,Pnode left,Pnode right,char data)/root->left=left;void PreorderR(Pnode proot)/ 遞歸先序遍歷算法if(proot)printf("
7、%2c",proot->data);PreorderR(proot->left);PreorderR(proot_>right);void InorderR(Pnode proot)/遞歸中序遍歷算法if(proot)InorderR(proot->left);printf("%2c",proot->data);InorderR(proot->right);void PostorderR(Pnode proot)/ 遞歸后序遍歷算法if(proot)PostorderR(proot->left);PostorderR(pr
8、oot->right);非遞歸先序遍歷算法如果??詹⑶医Y(jié)點(diǎn)指針空,則結(jié)束循環(huán)void Preorderl(Pnode proot,Pstack pstack)/Initstack(pstack);/ 初始化棧while(proot|!lsempty(pstack) if(proot)printf("%2c",proot->data);if(lsfull(pstack)如果棧滿不能執(zhí)行入棧操作printf("棧滿,不能執(zhí)行入棧操作!");return;Push(pstack,proot);入棧proot=proot->left;指針指向左
9、子elseif(Isempty(pstack)/ ??諘r(shí)不能出棧printf("棧空,不能執(zhí)行出棧操作!");return;proot = Pop(pstack);/ 執(zhí)行出棧操作void lnorderl(Pnode proot,Pstack pstack)/非遞歸中序遍歷算法Initstack(pstack);/初始化棧while(proot|!lsempty(pstack)循環(huán)結(jié)束條件if(proot)if(lsfull(pstack)printf("棧滿,不能執(zhí)行入棧操作!");return;Push(pstack,proot);執(zhí)行入棧操作pr
10、oot = proot->left;指針指向左子elseif(Isempty(pstack)printf("棧空,不能執(zhí)行出棧操作!”);return ;proot = Pop(pstack);/ 出棧void Postorderl(Pnode proot,Pstack pstack)/非遞歸后續(xù)遍歷算法int flagsMAX;定義標(biāo)志位棧int p =-1;/初始化標(biāo)志位棧int flag;/ 存放標(biāo)志位Initstack(pstack);/初始化棧while(proot|!lsempty(pstack)循環(huán)結(jié)束條件if(proot) if(Isfull(pstack) p
11、rintf("棧滿,不能執(zhí)行入棧操作!");return ;flags+p = 0;/標(biāo)志位置0,并入棧Push(pstack,proot); 結(jié)點(diǎn)入棧proot=proot->left;指針指向左子elseproot = Pop(pstack);/ 指針出棧flag = flagsp-;/相應(yīng)標(biāo)志位出棧if(flag=0)/ 如果標(biāo)志位為0表示右子還未訪問過flag =1;/ 將標(biāo)志位置1,右子已訪問flags+p = flag;/ 標(biāo)志位入棧Push(pstack,proot);結(jié)點(diǎn)入棧proot = proot->right;指針指向右子elseprint
12、f("%2c",proot->data);打印數(shù)據(jù)proot = NULL;/將結(jié)點(diǎn)指針置空void main ()Tnode A,B,C,D,E,F,G;聲明結(jié)點(diǎn)變量Stack stack;/ 聲明棧Inittnode(&A,&B,&C,'A');初始化結(jié)點(diǎn)Inittnode(&B,NULL,&D,'B');Inittnode(&C,&E,&F,C);Inittnode(&D,NULL,NULL,'D');Inittnode(&E,NULL
13、,NULL,'E');Inittnode(&F,&G,NULL,'F');Inittnode(&G,NULL,NULL,'G');printf("你定義的樹的結(jié)構(gòu)是:n");/*一下是調(diào)用相應(yīng)的函數(shù)輸出遍歷結(jié)果*/printf("A(B(D)C(E F(G)n");printf("=printf("= PreorderR(&A); printf("n");printf("=Preorderl(&A,&stack
14、); printf("n");printf("=InorderR(&A);printf("n");printf("=lnorderl(&A,& stack); printf("n");printf("=:PostorderR(&A); printf("n");printf("=:Postorderl(&A,& stack); printf("n");五、遇到的問題及解決辦法下面是遍歷結(jié)果=n") 遞
15、歸先序遍歷:=n") 非遞歸先序遍歷:=n") 遞歸中序遍歷:=n") 非遞歸中序遍歷: =n") 遞歸后序遍歷:=n"); 非遞歸后序遍歷:=n");這部分我主要遇到如下兩個(gè)問題,其內(nèi)容和解決方法如下所列: 執(zhí)行程序時(shí)程序停止運(yùn)行,其效果如圖:解決方法:看到程序停止運(yùn)行,推測可能的原因:遇到死循環(huán)、參數(shù)設(shè)置不合 理或者結(jié)構(gòu)體沒有造好。首先對結(jié)構(gòu)體進(jìn)行了檢查,各個(gè)成員聲明正常無誤,在 對程序進(jìn)行調(diào)試,程序正常跳出循環(huán),因此最可能是自定義函數(shù)的參數(shù)設(shè)置的不 合理,因此對調(diào)用的自定義函數(shù)進(jìn)行相應(yīng)的改動(dòng), 將參數(shù)由具體類型改為指針類 型后,
16、程序正常運(yùn)行。程序不停的輸出同一個(gè)結(jié)點(diǎn)的數(shù)據(jù),其效果入圖:怦竺ie汕;m,細(xì)攔沽0一7按¥1蒂0一寸柚fl詞云恥乩叩;吟psgq. II DDDDDDEDDDJDDDELL'DL'DJJDODDDDDOraDLiDDDDDDDDCIiDDDDBDCCLDDDDDDDWIlDDDDDbDnCDDDDDODD * ?DDDDDr:rDDD3DTrDDDDDDDD0ErDDD3DDDrDDDDDDDCErDDDD3DDDWDDDDT:DDDDDDDDDEEDDD3D "DDOOTLDDDDBDaKDDDDDDDDDDDDDDDOmDBDBDDIIlMDDDDmDD
17、DDDDDOECDDDDDDDDnEDDDDIIIID 電 DODCDDDDDDNmiDDDDDDDDDDDDDDDDnDDDDDDDmnDDDDDDKrDDDDimTIICDDDDDKIDnDDDDOnD pDDUlJlJDDDJJJELlJLiDDlJDJlJL)LbDDDJDJUlJDl)DDDDDEULDDDD)LJDlJlJDDl)DDJDLlJLiDDDDJLJUljlJDDDJDJEE im jDCI ITDDTDJD匚 DDDDDMDCT nDDMRTTmDDD:!兀 M DDDDJETDDDDDJDCDMDDMDCf” DDDODDDDDDIWDCDDDDDCDODDDDDD
18、DODDDDDDJDDDCDDEDDDDDCDDDDDDC(®DDDDDODC©DDDDDDDC(D bDDDDDDDDDDDDDDCDDDDDODDDDDDDDDOnDDDDDDDnDCDDDDDrDDDDDDDDDDODCDDDDDODODDDDDDDDnD DDJLXJL LDDDDDDDELL'DDDDDDOL 叩)2811 腫叩為DCD1. L'DDDDDUELDDDDDDDDDL'DDDDDDOL UUDDJIUX: pDDDDDrDDnDTniDDDnDnDDnrDDDTimnrDDDDDDDETirDDDDBnonnDDnDDDnri
19、irinDDDDDEPDDDDODD pDDXDCEDDDDDDDDDDDDDDXDDDDDDDDDDDDDDDDDEXEDDDDDXDDDDDDDDDDDDDDDDDXDDDDDDDJDD piX)MrDDDDDOOIrmDPDDDDDDDDDD®OTDI)DI)DDDCDDDDDDIXWDDDDDDDWDBDDDC)DDDBDDDDI®DDn pDDDDDDDEDDDD皿珈 DDIX)DCDDDDDDDOMmDDDDIODIfflDDDDDnDDDDDDa)DDDDD 血 DCDDDDDDDDDDl 列 IbDDDDDEDDDDDDDDDDDDDDDDDDDDDDDODrDDDDDDDniDDDDDBDDDEDDDDDDDrCDDDDDDDDDEDDDODODDbD0DC'DLDDDDDDECEDDD)D3D0EDDEDDD0Dl!DBDDDDDCDDDDDBDjDCDDDDDDDCEDDDDDDDDLiDDD3D0DD PDDDODrDBD3D3DDEDDDDD3DOEIiDPD3roDrDBDDDDDCDrDDDDDDDDriDrDDD3DDEDDDDD3DODriDDDDDDDr IpDODDDCDDDDDDDE
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年業(yè)務(wù)咨詢合同范本
- 2025年新晉策劃商協(xié)議標(biāo)準(zhǔn)版
- 2025年高效電子貨運(yùn)定艙協(xié)議
- 2025年醫(yī)療服務(wù)協(xié)同與發(fā)展協(xié)議
- 2025年債務(wù)擔(dān)保合同示范
- 2025年中行商業(yè)房產(chǎn)貸款合同標(biāo)準(zhǔn)范本
- 2025年供應(yīng)鏈管理業(yè)務(wù)綁定協(xié)議
- 2025年度策劃職員離職信息保密合同
- 2025年個(gè)人養(yǎng)殖魚塘租賃合同模板
- 2025年國有產(chǎn)權(quán)轉(zhuǎn)讓合同模板
- 集成墻板購銷合同范本(2024版)
- 2023九年級歷史下冊 第三單元 第一次世界大戰(zhàn)和戰(zhàn)后初期的世界第10課《凡爾賽條約》和《九國公約》教案 新人教版
- 偏癱患者肩關(guān)節(jié)脫位的綜合康復(fù)治療
- 持續(xù)質(zhì)量改進(jìn)項(xiàng)目匯報(bào)
- 2024版買賣二手車合同范本
- 阻燃更要消煙一文讓你掌握無煙阻燃改性技術(shù)的方方面面
- 第15課 列強(qiáng)入侵與中國人民的反抗斗爭 教學(xué)設(shè)計(jì)-2023-2024學(xué)年中職高一上學(xué)期高教版(2023)中國歷史全一冊
- 2023年人教版七年級歷史下冊《全冊課件》
- 新大象版科學(xué)三年級下冊全冊知識(shí)點(diǎn) (復(fù)習(xí)用)
- 2024年黑龍江省專升本考試生理學(xué)護(hù)理學(xué)專業(yè)測試題含解析
- 建筑設(shè)計(jì)工程設(shè)計(jì)方案
評論
0/150
提交評論