![二叉樹的遍歷及線索化0001_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/25/6749de93-26f0-4854-bc56-b65cc18c02ef/6749de93-26f0-4854-bc56-b65cc18c02ef1.gif)
![二叉樹的遍歷及線索化0001_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/25/6749de93-26f0-4854-bc56-b65cc18c02ef/6749de93-26f0-4854-bc56-b65cc18c02ef2.gif)
![二叉樹的遍歷及線索化0001_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/25/6749de93-26f0-4854-bc56-b65cc18c02ef/6749de93-26f0-4854-bc56-b65cc18c02ef3.gif)
![二叉樹的遍歷及線索化0001_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/25/6749de93-26f0-4854-bc56-b65cc18c02ef/6749de93-26f0-4854-bc56-b65cc18c02ef4.gif)
![二叉樹的遍歷及線索化0001_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/25/6749de93-26f0-4854-bc56-b65cc18c02ef/6749de93-26f0-4854-bc56-b65cc18c02ef5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、青島理工大學(xué)數(shù)據(jù)結(jié)構(gòu)課程實(shí)驗(yàn)報(bào)告課程名稱數(shù)據(jù)結(jié)構(gòu)班級(jí)網(wǎng)絡(luò)102實(shí)驗(yàn)日期2012/4/26姓名徐夢(mèng)婷學(xué)號(hào)201007110實(shí)驗(yàn)成績(jī)實(shí)驗(yàn)名稱二叉樹的遍歷及線索化實(shí)驗(yàn)?zāi)康募耙笳莆找徊鏄涞慕?,用遞歸方法先序、中序、后序遍歷和非遞歸 的中序遍歷及層次遍歷還有二叉樹的線索化以及中序遍歷的算法及 代碼實(shí)現(xiàn)。實(shí) 驗(yàn) 環(huán) 境硬件平臺(tái):普通的PC機(jī)軟件平臺(tái):Windows 2003操作系統(tǒng)編程環(huán)境:VisualC+實(shí) 驗(yàn) 內(nèi) 容1、建立一棵二叉樹,定義它的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),包括數(shù)據(jù)域和指針域2、掌握用遞歸方法的前中后序遍歷3、掌握非遞歸的中序遍歷(利用棧)和層次遍歷(利用隊(duì)列)4、掌握二叉樹的線索化,定義二叉線索
2、存儲(chǔ)結(jié)構(gòu)并對(duì)她進(jìn)行中序線 索化以及遍歷算 法 描 述 及 實(shí) 驗(yàn) 步 驟1、typedef int TElemType;/定義了二叉樹的存儲(chǔ)結(jié)構(gòu) typedef struct BiTNodeTElemType data;/砧點(diǎn)域struct BiTNode *lchild,*rchild;/ 左右孩子指針BiTNode,*BiTree;typedef BiTree SElemType;/用遞歸方法建立一棵一叉樹void CreatBiTree(BiTree &T)if(ch=0)T=NULL; 創(chuàng)建了一棵空樹elseT=(BiTNode *)malloc(sizeof(BiTNode)
3、;/ 申請(qǐng)樹根結(jié)點(diǎn)空間T->data=ch;CreatBiTree(T->lchild);遞歸生成左子樹CreatBiTree(T->rchild);/遞歸生成右子樹2、/以遞歸先序遍歷為例void PreOrderTraverse(BiTree T,Status(*Visit)(TElemType e)if(T)Visit(T->data);/首先訪問根結(jié)點(diǎn)PreOrderTraverse(T->lchild,Visit);/然后遞歸遍歷左子樹 PreOrderTraverse(T->rchild,Visit);/最后遞歸遍歷右子樹/中序遍歷時(shí)先遞歸遍歷左
4、子樹,然后訪問根結(jié)點(diǎn),最后遞歸遍歷 右子樹;后序遍歷"時(shí)先遞歸遍歷"左子樹,然后遞歸遍歷"右子樹,最后 訪問根結(jié)點(diǎn)3、/先把棧及隊(duì)列相關(guān)操作的頭文件包括進(jìn)來(lái)1)根指針入棧,2)向左走到左盡頭(入棧操作)3)出棧,訪問結(jié)點(diǎn)4)向右走一步,入棧,循環(huán)到第二步,直到???層次遍歷時(shí),若樹不空,則首先訪問根結(jié)點(diǎn),然后,依照其雙親結(jié) 點(diǎn)訪問的順序,依次訪問它們的左、右孩子結(jié)點(diǎn);4.首先建立二叉線索存儲(chǔ):包含數(shù)據(jù)域,左右孩子指針以及左右標(biāo)志typedef enum Link=0,Thread=1 PointerTag;typedef struct BiThrNodeTElem
5、Type data;struct BiThrNode *lchild,*rchild;/ 左右孩子指針PointerTag LTag,RTag;/E 右標(biāo)志BiThrNode, *BiThrTree;建立前驅(qū)線索和后繼線索,并用中序遍歷進(jìn)行中序線索化,然后最后一個(gè)結(jié)點(diǎn)線索化調(diào)試過程及實(shí)驗(yàn)結(jié)果把測(cè)試數(shù)據(jù)放在f:filedata.txt里,測(cè)試數(shù)據(jù)為:1 2 4 0 0 0 3 5 0 0 0育創(chuàng)建一樣杈寸二F面是遞歸方法的先序遍歷樹立F面是遞歸方法的 中序遍歷權(quán)寸宣. 12±53F面是遞歸方法的后序遍歷樹富.T面是三£遞歸的 中序遍歷樹工.F面是層次遍歷樹工- LN34sPi
6、'ess An u y 七o cone inue訪問結(jié)點(diǎn)是指訪問該結(jié)點(diǎn)的數(shù)據(jù)域,弄清楚各個(gè)指針?biāo)傅念愋徒Y(jié)附#include<queue> using namespace std;#include<stdio.h>#include<string.h>#include<stdlib.h>#include<math.h>#include"SqStack.h"typedef int Status;typedef int TElemType;/函數(shù)結(jié)果狀態(tài)代碼#define TRUE 1#define FALSE
7、0#define OK 1#define ERROR 0#define INFEASIBLE -1 typedef BiTree QElemType;/單鏈隊(duì)列一一隊(duì)列的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)typedef struct QNode QElemType data; QNode *next;*QueuePtr;struct LinkQueueQueuePtr front,rear;/ 隊(duì)頭、隊(duì)尾指針 ;錄void InitQueue(LinkQueue &Q) / 構(gòu)造一個(gè)空隊(duì)列 Qif(!(Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode) exit(OV
8、ERFLOW);Q.front->next=NULL;void EnQueue(LinkQueue &Q,QElemType e) /插入元素e為Q的新的隊(duì)尾元素QueuePtr p;if(!(p=(QueuePtr)malloc(sizeof(QNode) / 存儲(chǔ)分配失敗 exit(OVERFLOW);p->data=e;p->next=NULL;Q.rear->next=p;Q.rear=p;Status DeQueue(LinkQueue &Q,QElemType &e) /若隊(duì)列不空、刪除Q的隊(duì)頭元素、用e返回其值、并返回OK、否則返回
9、ERROR QueuePtr p;if(Q.front=Q.rear)return ERROR;p=Q.front->next; e=p->data;Q.front->next=p->next;if(Q.rear=p)Q.rear=Q.front;free(p); return OK;Status QueueEmpty(LinkQueue Q) /若Q為空隊(duì)列,則返回TRUE,否則返回FALSE if(Q.front->next=NULL)return TRUE;else return FALSE;/函數(shù)指針visit指向這個(gè)函數(shù) Status print(TEl
10、emType data) printf("%d",data); return OK;/創(chuàng)建一棵樹,字符代表結(jié)點(diǎn),空格代表空樹 void CreatBiTree(BiTree &T)int ch;scanf("%d",&ch);if(ch=0)T=NULL;/這是一棵空樹 else T=(BiTNode *)malloc(sizeof(BiTNode);/ 申請(qǐng)結(jié)點(diǎn)空間,放樹 根結(jié)點(diǎn)if(!T)exit(OVERFLOW);T->data=ch;CreatBiTree(T->lchild);遞歸生成左子樹CreatBiTree(
11、T->rchild);/遞歸生成右子樹 /void PreOrderTraverse(BiTree T,Status(*Visit)(TElemType e)if(T)Visit(T->data);/首先訪問根結(jié)點(diǎn)PreOrderTraverse(T->lchild,Visit);/然后遞歸遍歷左子樹PreOrderTraverse(T->rchild,Visit);/最后遞歸遍歷右子樹)/遞歸中序遍歷void InOrderTraverse(BiTree T,Status(*Visit)(TElemType e) if(T)/T不是空樹InOrderTraverse(
12、T->lchild,Visit);/首先遞歸遍歷左子樹Visit(T->data);/訪問根結(jié)點(diǎn)InOrderTraverse(T->rchild,Visit);/最后遞歸遍歷右子樹 )/遞歸后序遍歷void PostOrderTraverse(BiTree T,Status(*Visit)(TElemType e) if(T)PostOrderTraverse(T->lchild,Vis。/遞歸遍歷左子樹 PostOrderTraverse(T->rchild,Vis。/遞歸遍歷右子樹 Visit(T->data);/訪問根結(jié)點(diǎn)/非遞歸的中序遍歷(利用棧)
13、Status InOrderTraverse2(BiTree T,Status (* Visit)(TElemType e)SqStack S;InitStack(S);BiTree p;Push(S,T);僑艮指針入棧while(!StackEmpty(S)while(GetTop(S,p)&&p)Push(S,p->lchild);/向左走到盡頭Pop(S,p);/空指針退棧if(!StackEmpty(S)訪問結(jié)點(diǎn)、向Pop(S,p);if(!Visit(p->data)return ERROR;Push(S,p->rchild);return OK;/
14、層次遍歷(利用隊(duì)列)void BFSTraverse(BiTree T,Status (* Visit)(TElemType e)LinkQueue Q;QElemType p;InitQueue(Q);/置空的輔助隊(duì)列if(T)EnQueue(Q,T);朋艮結(jié)點(diǎn)入隊(duì)while(!QueueEmpty(Q)DeQueue(Q,p);/4寸頭出隊(duì)并置為pVisit(p->data );if(p->lchild)EnQueue(Q,p->lchild);if(p->rchild)EnQueue(Q,p->rchild);int main()freopen("
15、f:filedata.txt","r",stdin);BiTree T;printf("請(qǐng)創(chuàng)建一棵樹:n");CreatBiTree(T);printf("下面是遞歸方法的先序遍歷樹T.n");PreOrderTraverse(T,print);printf("下面是遞歸方法的中序遍歷樹T.n");InOrderTraverse(T,print);printf("下面是遞歸方法的后序遍歷樹T.n");PostOrderTraverse(T,print);printf("下面是
16、非遞歸的中序遍歷樹 T.n");InOrderTraverse2(T,print);printf("下面是層次遍歷樹T.n");BFSTraverse(T,print);return 0;二叉樹的線索化/二叉樹的二叉線索存儲(chǔ)表示typedef enum Link=0,Thread=1 PointerTag;Link=0:指針、Thread=1 線索 typedef struct BiThrNode (TElemType data;struct BiThrNode *lchild,*rchild;/ 左右孩子指針PointerTag LTag,RTag;/E 右標(biāo)志
17、 BiThrNode, *BiThrTree;Status print(TElemType data) (printf("%d",data); return OK;BiThrTree pre;/全局變量,始終指向p剛剛訪問過的結(jié)點(diǎn) /先序創(chuàng)建一棵二叉樹 void CreatBiThrTree(BiThrTree &T) (int ch;scanf("%d",&ch);if(ch=0)T=NULL;/這是一棵空樹 else (T=(BiThrNode *)malloc(sizeof(BiThrNode);if(!T)exit(OVERFLO
18、W);T->data=ch;CreatBiThrTree(T->lchild);/創(chuàng)建左子樹 if(T->lchild)T->LTag=Link;CreatBiThrTree(T->rchild);/ 創(chuàng)建右子樹 if(T->rchild)T->RTag=Link; /遞歸線索化 void InThreading(BiThrTree p) (/pre=p;if(p)/p不為空樹 (InThreading(p->lchild);/ 左子樹線索化if(!p->lchild)/ 前驅(qū)線索 (p->LTag=Thread;p->lchi
19、ld=pre;)if(!pre->rchild)/ 后繼線索(pre->RTag=Thread;pre->rchild=p;)pre=p;/保持pre指向p的前驅(qū)InThreading(p->rchild);/ 右子樹線索化 )/中序遍歷二叉樹,并將其中序線索化,Thrt指向頭結(jié)點(diǎn) Status InOrderThreading(BiThrTree &Thrt,BiThrTree T) (if(!(Thrt=(BiThrTree)malloc(sizeof(BiThrNode) exit(OVERFLOW);Thrt->LTag=Link;Thrt->RTag=Thread;/處頭結(jié)點(diǎn)Thrt->rchild=Thrt;/ 右指針回指 if(!T)Thrt->lchild=Thrt;/若二叉樹為空,則左指針回指 else (Thrt->lchild=T;pre=Thrt;InThreading(T);/中序遍歷進(jìn)行中序線索化pre->rchild=Thrt; pre->RTag=Thread;/
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度屋頂光伏系統(tǒng)維護(hù)保養(yǎng)合同模板
- 學(xué)校安全管理方案
- 2024-2025學(xué)年廣西壯族自治區(qū)高三上學(xué)期11月聯(lián)考?xì)v史試卷
- 2025年公共照明設(shè)施合同
- 2025年自動(dòng)化設(shè)備購(gòu)買與前期策劃協(xié)議
- 2025年住宅用地和樓宇訂購(gòu)合同
- 2025年綠化養(yǎng)護(hù)承包合同范本
- 2025年外教聘請(qǐng)合作協(xié)議
- 2025年二手房產(chǎn)交易代理協(xié)議格式
- 2025年交通運(yùn)輸中介合同協(xié)議書范本
- GB/T 36547-2024電化學(xué)儲(chǔ)能電站接入電網(wǎng)技術(shù)規(guī)定
- 育嬰員初級(jí)培訓(xùn)
- 學(xué)校物業(yè)管理投標(biāo)書范本
- 護(hù)理教學(xué)組工作匯報(bào)
- 醫(yī)療廢物管理?xiàng)l例
- 新視野英語(yǔ)1學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 生活垃圾焚燒發(fā)電廠摻燒一般工業(yè)固廢和協(xié)同處置污泥項(xiàng)目環(huán)評(píng)資料環(huán)境影響
- 《祖國(guó)被屈辱的歷史》課件
- 小學(xué)教師法制培訓(xùn)課件
- 建筑與市政工程地下水控制技術(shù)規(guī)范 JGJ111-2016 培訓(xùn)
- 2024年汽車裝調(diào)工技能競(jìng)賽理論考試題庫(kù)(含答案)
評(píng)論
0/150
提交評(píng)論