二叉樹的遍歷(先序遍歷、中序遍歷、后序遍歷全)實(shí)驗(yàn)報(bào)告_第1頁
二叉樹的遍歷(先序遍歷、中序遍歷、后序遍歷全)實(shí)驗(yàn)報(bào)告_第2頁
二叉樹的遍歷(先序遍歷、中序遍歷、后序遍歷全)實(shí)驗(yàn)報(bào)告_第3頁
二叉樹的遍歷(先序遍歷、中序遍歷、后序遍歷全)實(shí)驗(yàn)報(bào)告_第4頁
二叉樹的遍歷(先序遍歷、中序遍歷、后序遍歷全)實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、實(shí)驗(yàn)?zāi)康木帉懸粋€程序,實(shí)現(xiàn)二叉樹的先序遍歷,中序遍歷,后序遍歷。實(shí)驗(yàn)內(nèi)容編程序并上機(jī)調(diào)試運(yùn)行。編寫一個程序,實(shí)現(xiàn)二叉樹的先序遍歷,中序遍歷,后序遍歷 編寫程序/*二叉樹的遍歷*/#include#includetypedef struct BiTNodechar data;struct BiTNode *lchild,*rchild;BiTNode,*BiTree;/按先序次序構(gòu)建的二叉樹鏈表void CreatBiTree(BiTree *T)char ch; if(ch=getchar()= ) *T=NULL;else *T=(BiTNode*)malloc(sizeof(BiTNode

2、); if(!(*T) exit(1);(*T)-data=ch; CreatBiTree(&(*T)-lchild); CreatBiTree(&(*T)-rchild);/先序遍歷-遞歸算法void PreOrderTraverse(BiTree T) if(T) printf(%c,T-data); PreOrderTraverse(T-lchild); PreOrderTraverse(T-rchild);/中序遍歷-遞歸算法void InOrderTraverse(BiTree T)if(T)InOrderTraverse(T-lchild); printf(%c,T-data);I

3、nOrderTraverse(T-rchild);/后序遍歷-遞歸算法void PostOrderTraverse(BiTree T)if(T)PostOrderTraverse(T-lchild);PostOrderTraverse(T-rchild); printf(%c,T-data);/main 函數(shù) void main() BiTree T;printf(請按先序次序輸入二叉樹中結(jié)點(diǎn)的值,空格字符表示空樹:n”);CreatBiTree (&T);printf(n);printf(”先序遍歷為:n);PreOrderTraverse(T);printf(nn);printf(中序遍歷

4、為:n);InOrderTraverse(T);printf(nn);printf(”后序遍歷為:n);PostOrderTraverse(T);printf(nn);getchar();運(yùn)行程序:請按先序次序輸入二叉樹中結(jié)點(diǎn)的值,空格字符表示空樹:ABC DE G F請按先序次序輸入二叉樹中結(jié)點(diǎn)的値,空格字符表示空樹:OBC DE G F先序遍歷為=ABCDEGF中序遍歷為;GBEGDFfi后序遍歷為:CGEFDBfiPpess any 1呂屮 to continue結(jié)果分析:按先序輸入的二叉樹為ABCAADEAGAAFAAA (人為空格) 該二叉樹畫成樹形為:其先序遍歷為:ABCDEGF

5、其中序遍歷為:CBEGDFA 其后序遍歷為:CGEFDBA 可以看出運(yùn)行結(jié)果是正確的。程序解析:1.首先是將程序的開頭寫好,因?yàn)楹竺嬉玫絤alloc,所以要有stdlib.h的 聲明。然后建立指針表struct BiTNode,定義其數(shù)據(jù)類型為char型,指針指向 lchild,rchild,下一個指針為 BiTNode./*2_5!寸的蓋豪蓋序芳序芳序芳序芳序芳1* /itinclu(leitinclu(letypedeF struct BiTNodechar data;struct BiTHode *lchild 9*rcliild ;BiTHode,*BiTree;2按先序次序構(gòu)建二叉

6、樹鏈表To/ *穽穽養(yǎng) *羋攔琴羋穽壬*養(yǎng)軒養(yǎng)琴提軒穽費(fèi)來強(qiáng)*費(fèi)餐餐釜餐穽餐穽餐蚤餐豊蚤關(guān)at/按先序次昂構(gòu)建的二翼樹鏈表uoid CreatBiTree(BiTree *T)char ch;if (ch = getctiar()=)*T=HULL;elsedata=ch;CreatBiTrpp(E;(*T)-lctiild);CreatBiTr&(&(*T)-rctiild);函數(shù)CreatBiTree為構(gòu)建二叉樹鏈表的函數(shù),T為指針,定義ch為字符型,如果 輸入為空格的話,指針就為空。否則,就新開辟一個單元,如果開辟失敗,則強(qiáng) 制錯誤退出,如果開辟成功,就讓ch指向新單元的數(shù)據(jù),然后再指向

7、左孩子, 再指向右孩子。遇到的問題:一開始寫的是以下程序:void CreatBiTree(BiTree T)char ch;iF(Cch=getchar()=)T=NULL;elsedata=ch;CreatBiTreeCT-Mchild); CreatBiTree(T-rchild);沒有指針形式,調(diào)試的時候沒有錯誤,也可以執(zhí)行,但是執(zhí)行的時候就發(fā)生以下錯誤:匸口空格字符表示空樹:洗序遍歷為:匸口空格字符表示空樹:洗序遍歷為:i| y.exe已停止工作凸現(xiàn)了一問題導(dǎo)錢程序亭止正常工惟.請關(guān)詡該程 序4關(guān)閉程序所以在T的前面加一個指針符號,因?yàn)橐弥羔樦赶蛐碌慕Y(jié)點(diǎn),所以將后面的T都加上一 個

8、*,結(jié)果還是錯誤:P青按先序次序輸入二叉樹中結(jié)點(diǎn)的值,空格字符表示空樹:HBC DE G F叵2| y-exe已停止工作口現(xiàn)了一r問題r導(dǎo)毀程序停止正帛工作.請關(guān)閉諺程 序4lchild);CreatBiTree(fe(*T)-rchild):這樣結(jié)果就對了。3建立先序遍歷函數(shù)。先序遍歷一遞歸算法uoid PreOrderTrauersetBiTree T)data);PreOrderTrauersefT-lchild):PreOrderTrauer5e(T-rchild):用遞歸算法建立先序遍歷的函數(shù)PreOrderTraverse,如果T不為0,則先輸出其根,再 輸出左孩子,在輸出右孩子。

9、這種方法為遞歸算法,以下的中序,后序均與此類似。4建立中序遍歷函數(shù)。/卑卑里卑舉卑關(guān)罷黑黑*罷罷黑里共*莫案穽彈莫黑器*器*彈*器*羋琴崔琴峯琴羋琴鑒羋聲羋聲誓彈豊餐共/ 中序遍歷一遞歸算袪.void InOrderTrauerse(BiTree T)ifT)lchild);printf ,T-data);InOrderTraverse(T-rchild);用遞歸算法建立中序遍歷函數(shù)InOrderTraverse,其函數(shù)的寫法與先序的類似,先輸出其 左孩子,再輸出根節(jié)點(diǎn),再輸出其右孩子。書上的中序遍歷用的是非遞歸算法,非遞歸算法 用的是棧,所以還要建棧,入棧,出棧等函數(shù),相較于遞歸算法麻煩很多

10、。5建立后序遍歷函數(shù)。/聲鑒擊睪事鑒睪案舉關(guān)舉舉舉卑里關(guān)里關(guān)舉關(guān)罷黑里罷罷里黑黑里罷穽穽琴穽穽藝穽穽穽穽*琴關(guān)#關(guān)*#/ 后序遍歷一遞歸算袪.uoid PostOrderTraverse(BiTree T)if(T)lchild);PostOrderTrauerse(T-rchild); printf(c,T-data);用遞歸算法建立后序遍歷函數(shù)PostOrderTraverse,先輸出其左孩子,再輸出其右孩子,再輸 出其根節(jié)點(diǎn)。以C的格式輸出。6建立main函數(shù)。/*#*#*#*#*#*#*#*/m日in函數(shù)void main()BiTree T;Printff請按先序次序輸入二叉樹中結(jié)點(diǎn)的值,空格字符表示空W:n-);CreatBiTree(&T); printFCXn);PintFC先序遍歷為An);PreOrderTrauerseCT);printf (,nn,)jPrintf(中序遍歷

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論