




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、實(shí)習(xí)題目:編寫算法判別給定二叉樹是否為完全二叉樹。一、 需求分析1、根據(jù)題目要求,以嵌套括號法輸入二叉樹,用戶需要輸入嵌套形式的字符串,在程序中會自動(dòng)建立一個(gè)二叉樹,并對樹進(jìn)行分析,運(yùn)行結(jié)果會先打印出以嵌套括號表示的二叉樹,而后是判斷的結(jié)果。如果輸入的二叉樹錯(cuò)誤,程序指揮對前面符合二叉樹定義的數(shù)據(jù)進(jìn)行分析,如打入 a(b,c),d(e,f)程序會建立樹a(b,c)并支隊(duì)這樹進(jìn)行分析。2、二、概要設(shè)計(jì)該程序有以下幾個(gè)子程序:Creatree();/該程序要求輸入并根據(jù)嵌套括號表示法的字符串str生成/樹,并返回樹的頭節(jié)點(diǎn)指針;/打印出建立的二叉樹;的二叉Pr(*b);Ctree(*b);/對給定
2、的二叉樹進(jìn)行判斷是否為二叉樹,是,則返回1,否則返回0;三、概要算法#include #define MAX 30#define NULL 0 typedef struct node char data;struct node *left; struct node *right;Btree;/定義二叉樹類型;Btree *Ctr_tree()/根據(jù)輸入的嵌套括號表示法的字符串*str 生成Btree *stackMAX,*p,*b; char str100;的二叉樹top=-1,k,j=0;/top 為棧指針,k 指定是左還是右孩子,j 為str 的指針p=b=NULL;prf(nInput
3、the tree(expressed by embeded brackets):);/輸入嵌套括號法表示的字符串str; gets(str);ch=strj; while(ch!=0)switch(ch)case (:top+;stacktop=p;k=1;break;/左節(jié)點(diǎn); case ):top-;break;case ,:k=2;break;/右街點(diǎn); default:p=(Btree *)malloc(sizeof(Btree);p-dh;p-left=p-right=NULL;if(b=NULL)b=p;/根節(jié)點(diǎn); elseswitch(k)case 1:stacktop-left
4、=p;break; case 2:stacktop-right=p;break;/switch;/if/switch; j+;ch=strj;/while; return b;void Pr(Btree *b)/用嵌套括號表示法輸出一顆二叉樹;if(b!=NULL)prf(%c,b-data);if(b-left|b-right)prf();Pr(b-left);/遞歸處理樹;if(b-right)prf(,);Pr(b-right);/遞歸處理右子樹;prf();Ctree(Btree *b)/判斷給定的數(shù)是否為完全二叉樹,是則返回Btree *queueMAX,*p;/定義一個(gè)隊(duì)列,用于分
5、成判斷;=0,rear=0,bj=1,cm=1;/cm 表示整個(gè)二叉需是否為完全二叉樹,bj 表示到目前為止所有結(jié)點(diǎn)均由左右孩/子if(b!=NULL)rear+; queuerear=b;while(!=rear&cm)/隊(duì)列不空;+;p=queue if(!p-left)bj=0;if(p-right) cm=0; /if elsecm=bj; rear+;queuerear=p-left; if(!p-right) bj=0; elserear+;queuerear=p-right;/while return cm;return 1;/空樹;四、執(zhí)行程序 #include #define
6、 MAX 30#define NULL 0 typedef struct node char data;struct node *left; struct node *right;Btree;Btree *Ctr_tree()Btree *stackMAX,*p,*b; char str100;top=-1,k,j=0; char ch; p=b=NULL;prf(nInput the tree(expressed by embeded brackets):);gets(str); ch=strj; while(ch!=0)switch(ch)case (:top+;stacktop=p;k=
7、1;break; case ):top-;break;case ,:k=2;break;default:p=(Btree *)malloc(sizeof(Btree);p-dh;p-left=p-right=NULL;if(b=NULL)b=p; elseswitch(k)case1:stacktop-left=p;break; case2:stacktop-right=p;break; j+;ch=strj;return b;void Pr(Btree *b)if(b!=NULL)prf(%c,b-data);if(b-left|b-right)prf();Pr(b-left);if(b-r
8、ight)prf(,);Pr(b-right);prf();Ctree(Btree *b)Btree *queueMAX,*p;=0,rear=0,bj=1,cm=1; if(b!=NULL)rear+; queuerear=b;while(!=rear&cm)+;p=queue if(!p-left)bj=0;if(p-right) cm=0; elsecm=bj;rear+; queuerear=p-left; if(!p-right) bj=0; elserear+;queuerear=p-right;return cm; return 1;void main()Btree *root;
9、 root=Ctr_tree();pr Prf(nThe tree:); (root);if(Ctree(root)=1)prf( is);else prf( is not);prf( a complete binary tree.n);五、調(diào)試分析這個(gè)算法編得比較成功,編譯和調(diào)試時(shí)出錯(cuò)很少且易改,但當(dāng)運(yùn)行時(shí),卻發(fā)現(xiàn)無論輸入什么二叉樹,都不是完全二叉樹,用 pritnf 語句輸出cm,bj 值和判斷過程中碰到的數(shù)的結(jié)點(diǎn),發(fā)現(xiàn)無錯(cuò),只是 cm 值多了兩個(gè)且均為 0。重新對照編的算法進(jìn)行分析,沒錯(cuò),幾經(jīng)調(diào)試仍無結(jié)果,請同學(xué)幫忙修改無結(jié)果,次日上機(jī)時(shí),仔細(xì)檢查機(jī)上程序才發(fā)覺打錯(cuò)了一個(gè)字母,誤將 p 打?yàn)?b,以至結(jié)果出錯(cuò)。該會后,運(yùn)行成功。得出結(jié)論:機(jī)上的程序不能運(yùn)行或運(yùn)行出錯(cuò)而你編的紙上的算法沒錯(cuò)時(shí),很可能就是你在打字時(shí)出錯(cuò)了。六、運(yùn)行結(jié)果Input the tree (expressed by embeded brackets):a(b(f),c(d,e) The tree:a(b(
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 磚廠供貨工地合同范本
- 肅寧鐵路施工合同范本
- 小型工程報(bào)價(jià)合同范本
- 浙江國企招聘2024浙江嘉興國有資本投資運(yùn)營有限公司招聘37人筆試參考題庫附帶答案詳解
- 2025至2030年中國原味多層蒸汽鍋數(shù)據(jù)監(jiān)測研究報(bào)告
- 糖尿病足的評估與護(hù)理
- 2025至2030年中國不銹鋼對講門數(shù)據(jù)監(jiān)測研究報(bào)告
- 2025年中國頂箱柜市場調(diào)查研究報(bào)告
- 接送工人合同范本
- 2025年度雨污水管道施工合同爭議解決勞務(wù)分包合同
- 學(xué)生創(chuàng)新能力培養(yǎng)方案計(jì)劃
- 《西門子PLC應(yīng)用》一體化教案1-20周全篇
- 新蘇教版一年級科學(xué)下冊第一單元第1課《撿石頭》課件
- 2025年湖北省技能高考(建筑技術(shù)類)《建筑材料與檢測》模擬練習(xí)試題庫(含答案)
- 2024-2025學(xué)年第二學(xué)期教學(xué)教研工作安排表 第二版
- 人行道道鋪設(shè)施工方案
- 2025年度模特代言合同隱私條款規(guī)范樣本4篇
- 【歷史】元朝的建立與統(tǒng)一課件 2024-2025學(xué)年統(tǒng)編版七年級歷史下冊
- 2025年度游戲工作室游戲客服中心用工合同
- 2024年高州市人民醫(yī)院廣東醫(yī)學(xué)院附屬高州醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點(diǎn)附帶答案
- 橋梁拆除施工方案及安全措施
評論
0/150
提交評論