資源描述:
《二叉樹地建立與遍歷及二叉樹地線索化及線索化遍歷》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。
1、實(shí)用昆明理工大學(xué)信息工程與自動(dòng)化學(xué)院學(xué)生實(shí)驗(yàn)報(bào)告(2011—2012學(xué)年第1學(xué)期)課程名稱:數(shù)據(jù)結(jié)構(gòu)開課實(shí)驗(yàn)室:信自樓4422011年11月06日年級(jí)、專業(yè)、班學(xué)號(hào)姓名成績(jī)實(shí)驗(yàn)項(xiàng)目名稱二叉樹的建立與遍歷及二叉樹的線索化及線索化遍歷指導(dǎo)教師教師評(píng)語(yǔ)教師簽名:年月日一、程序功能:(1).線索二叉樹的主要函數(shù)設(shè)置如下:1.樹的存儲(chǔ)的類型為:typedefstructbithrnode{chardata;structbithrnode*lchild,*rchild;intltag,rtag;}bithrnode,*bithrtree;文檔實(shí)用2.主程序:bithrtreeT
2、,p,T1;intk;Do{switch(k){case1:creat(T);--------建立二叉樹T1=copy(T);---------復(fù)制建立后的二叉樹case2:T=copy(T1);---------復(fù)制建立后的二叉樹PreOrderThreading(p,T);---------先序線索化first(p);--------------先序遍歷case3:T=copy(T1);---------復(fù)制建立后的二叉樹InOrderThreading(p,T);----------中序線索化mid(p);---------------中序遍歷case4:T=
3、copy(T1);---------復(fù)制建立后的二叉樹backorderThreading(p,T);-------------后序線索化last(p);--------------后序遍歷}文檔實(shí)用}while(k!=0);3.子程序:bithrtreecreat(bithrtree&T)--------建立二叉樹StatusPreOrderThreading(bithrtree&thrt,bithrtreeT)---------先序線索化{voidPreThreading(bithrtreep)}---------先序線索化子函數(shù)StatusInOrderThr
4、eading(bithrtree&thrt,bithrtreeT)----------中序線索化{voidinthreading(bithrtree&p)}----------中序線索化子函數(shù)StatusbackorderThreading(bithrtree&thrt,bithrtreeT)-------------后序線索化{voidbackthreading(bithrtreep)}-------------后序線索化子函數(shù)voidfirst(bithrtreethrt)--------------先序遍歷voidmid(bithrtreethrt)-----
5、----------中序遍歷voidlast(bithrtreet)--------------后序遍歷bithrtreecopy(bithrtree&r)---------復(fù)制建立后的二叉樹bithrtreecreat(bithrtree&T)(2).程序代碼如下:#include#include文檔實(shí)用#include#include#defineOVERFLOW-2#defineOK1#defineerror0typedefintStatus;typedefenumpointerta
6、g{link=0,thread=1};//link==0;指針thread==1;線索typedefstructbithrnode{chardata;structbithrnode*lchild,*rchild;//左右孩子指針intltag,rtag;}bithrnode,*bithrtree;bithrtreepre;bithrtreecreat(bithrtree&T)//構(gòu)造二叉樹{charch;fflush(stdin);scanf("%c",&ch);if(ch==''
7、
8、ch=='#')T=NULL;else{if(!(T=(bithrnode*)ma
9、lloc(sizeof(bithrnode))))returnerror;文檔實(shí)用T->data=ch;T->ltag=0;T->rtag=0;printf("輸入父結(jié)點(diǎn)%c的左孩子:",ch);T->lchild=creat(T->lchild);printf("輸入父結(jié)點(diǎn)%c的右孩子:",ch);T->rchild=creat(T->rchild);}returnT;}voidPreThreading(bithrtreep)//先序線索化{if(p){if(!p->lchild){p->ltag=thread;p->lchild=pre;}//前驅(qū)線索if(