數(shù)據(jù)結(jié)構(gòu)二叉樹(shù)的生成和遍歷_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)二叉樹(shù)的生成和遍歷_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)二叉樹(shù)的生成和遍歷_第3頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡(jiǎn)介

1、6、二叉樹(shù)的生成建立一個(gè)二叉樹(shù)是指在內(nèi)存中建立二叉樹(shù)的存儲(chǔ)結(jié)構(gòu), 這里討論建立一個(gè)二 叉鏈表的方式生成一個(gè)二叉樹(shù)。 要建立一個(gè)二叉鏈表, 需按照完全二叉樹(shù)的層次 順序,依次輸入結(jié)點(diǎn)信息建立二叉鏈表。 對(duì)于一般的二叉樹(shù), 必須添加一些虛結(jié) 點(diǎn),使其成為完全二叉樹(shù)。我用 表示虛結(jié)點(diǎn), #表示輸入結(jié)束標(biāo)志。同時(shí)設(shè)置一 個(gè)隊(duì)列,隊(duì)列是一個(gè)指針類型的數(shù)組, 保存已輸入的結(jié)點(diǎn)的地址。 根據(jù)對(duì)為指針 奇偶數(shù)的判斷, 來(lái)決定把字符放到左結(jié)點(diǎn)還是有結(jié)點(diǎn)中, 這樣就能生成想要的二 叉樹(shù)。#define maxsize 100#include “ stdio.h ”#include “ malloc.h ”#def

2、ine NULL 0typedef struct btnodechar data;struct btonde lchild,rchild;Btree;Btree*Qmaxsize;Btree*creatree()char ch;int front,rear;Btree *t,*s;t=NULL;front=1;rear=0;ch=getchar();while(ch!= '#')s=NULL;if(ch!= ' ')s=(btree*)mlloc(sizcof(btree);s->data=ch; s->lchild=NULL; s->rchi

3、ld=NULL; rear+;Qrear=s;if(rear=1)T=s;elseif(s&&Qfront)If(rear%2=0)Qfront->lchild=s;ElseQfront->rchild=s; if(rear%2=1)front+; ch=getchar(); returnT;二叉樹(shù)的遍歷上面雖然已經(jīng)生成二叉樹(shù),但實(shí)際上用戶生成的二叉樹(shù)是抽象,用戶并不太 確信已經(jīng)生成的二叉樹(shù)是否是自己想要的, 于是,可以編制輸出程序進(jìn)一步驗(yàn)證 這個(gè)已經(jīng)存在的二叉樹(shù)的正確性。二叉樹(shù)的遍歷就是對(duì)二叉樹(shù)的每一個(gè)結(jié)點(diǎn)訪問(wèn)一次且僅訪問(wèn)一次。 我們通過(guò) 二叉樹(shù)的序遍歷的非遞歸算

4、法來(lái)驗(yàn)證其正確性。 二叉樹(shù)非遞歸遍歷是用顯示棧來(lái) 存儲(chǔ)二叉樹(shù)的結(jié)點(diǎn)指針。1、先序遍歷 使用一個(gè)棧,首先將根結(jié)點(diǎn)入棧,開(kāi)始循環(huán);從棧中退出當(dāng)前結(jié)點(diǎn),先訪 問(wèn)它,然后將其右結(jié)點(diǎn)入棧,再將其左結(jié)點(diǎn)入棧,如此直到??諡橹?。Void porder(Btree*T) Btree*stackmaxsize,*p;int top=-1; if(T!=NULL)top+;stacktop=T; while(top>-1) p=stacktop;top-;prinft( “ %c”,p->data); if(p->right!=NULL)top+;stacktop=p->left;2、后序

5、遍歷 先將根結(jié)點(diǎn)的所有左結(jié)點(diǎn)并入棧,出棧一個(gè)結(jié)點(diǎn),將該結(jié)點(diǎn)的右結(jié)點(diǎn)入棧, 再將該結(jié)點(diǎn)的左結(jié)點(diǎn)入棧, 當(dāng)一個(gè)結(jié)點(diǎn)的左右子樹(shù)均訪問(wèn)該結(jié)點(diǎn), 如此,直到棧 空為止。void pmorder(Btree*T)Btree*stackmaxsize,*p;int top=-1;dowhile(T)top+;stacktop=T;T=T->left;p=NULL;flag=1;while(top!=-1 &&flag)T=stacktop;ift->right=pprintf( “ %c”,T->data);top+;p=T;elseT=T->right;flag=0;while(top!=-1);中序遍歷先將根結(jié)點(diǎn)的所有左結(jié)點(diǎn)并入棧 ,出棧一個(gè)結(jié)點(diǎn) ,訪問(wèn)該結(jié)點(diǎn) ,將該結(jié)點(diǎn)的右 結(jié)點(diǎn)入棧 ,再將該結(jié)點(diǎn)的左結(jié)點(diǎn)入棧 , 當(dāng)一個(gè)結(jié)點(diǎn)的左子樹(shù)均訪問(wèn)后再訪問(wèn)該結(jié) 點(diǎn),最后訪問(wèn)右結(jié)點(diǎn) . 如此,直到棧空為止。Void psorder(btree*T)Btree*stackmaxsize,*p;int top=-1;dowhile(T)top+;stacktop=T;T=T->left;T=stacktop;printf( “ %c”,

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論