第四次上機上機題目_第1頁
第四次上機上機題目_第2頁
免費預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

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

文檔簡介

1、第四次上機 上機題目2源代碼:/* c1.h (程序名) */ #include #include #include /* malloc()等 */ #include /* INT_MAX等 */ #include /* EOF(=Z或F6),NULL */ #include /* atoi() */ #include /* eof() */ #include /* floor(),ceil(),abs() */ #include /* exit() */ /* 函數(shù)結(jié)果狀態(tài)代碼 */ #define TRUE 1 #define FALSE 0 #define OK 1 #define ER

2、ROR 0 #define INFEASIBLE -1 /* #define OVERFLOW -2 因為在math.h中已定義OVERFLOW的值為3,故去掉此行 */ typedef int Status; /* Status是函數(shù)的類型,其值是函數(shù)結(jié)果狀態(tài)代碼,如OK等 */ typedef int Boolean; /* Boolean是布爾類型,其值是TRUE或FALSE */ #define CHAR 1 /* 字符型 */ /*#define CHAR 0 /* 整型(二者選一) */ #if CHAR typedef char TElemType; TElemType Nil=

3、 ; /* 字符型以空格符為空 */ #else typedef int TElemType; TElemType Nil=0; /* 整型以0為空 */ #endif Status vi(TElemType c) #if CHAR printf(%c ,c); #else printf(%d ,c); #endif return OK; /* c6-3.h 二叉樹的二叉線索存儲表示 */ typedef enumLink,ThreadPointerTag; /* Link(0):指針,Thread(1):線索 */ typedef struct BiThrNode TElemType dat

4、a; struct BiThrNode *lchild,*rchild; /* 左右孩子指針 */ PointerTag LTag,RTag; /* 左右標(biāo)志 */ BiThrNode,*BiThrTree; Status CreateBiThrTree(BiThrTree *T) /* 按先序輸入二叉線索樹中結(jié)點的值,構(gòu)造二叉線索樹T */ /* 0(整型)/空格(字符型)表示空結(jié)點 */ TElemType h; #if CHAR scanf(%c,&h); #else scanf(%d,&h); #endif if(h=Nil) *T=NULL; else *T=(BiThrTree)m

5、alloc(sizeof(BiThrNode); if(!*T) exit(OVERFLOW); (*T)-data=h; /* 生成根結(jié)點(先序) */ CreateBiThrTree(&(*T)-lchild); /* 遞歸構(gòu)造左子樹 */ if(*T)-lchild) /* 有左孩子 */ (*T)-LTag=Link; CreateBiThrTree(&(*T)-rchild); /* 遞歸構(gòu)造右子樹 */ if(*T)-rchild) /* 有右孩子 */ (*T)-RTag=Link; return OK; BiThrTree pre; /* 全局變量,始終指向剛剛訪問過的結(jié)點 *

6、/ void InThreading(BiThrTree p) /* 中序遍歷進行中序線索化。算法6.7 */ if(p) InThreading(p-lchild); /* 遞歸左子樹線索化 */ if(!p-lchild) /* 沒有左孩子 */ p-LTag=Thread; /* 前驅(qū)線索 */ p-lchild=pre; /* 左孩子指針指向前驅(qū) */ if(!pre-rchild) /* 前驅(qū)沒有右孩子 */ pre-RTag=Thread; /* 后繼線索 */ pre-rchild=p; /* 前驅(qū)右孩子指針指向后繼(當(dāng)前結(jié)點p) */ pre=p; /* 保持pre指向p的前驅(qū)

7、 */ InThreading(p-rchild); /* 遞歸右子樹線索化 */ Status InOrderThreading(BiThrTree *Thrt,BiThrTree T) /* 中序遍歷二叉樹T,并將其中序線索化,Thrt指向頭結(jié)點。算法6.6 */ *Thrt=(BiThrTree)malloc(sizeof(BiThrNode); if(!*Thrt) exit(OVERFLOW); (*Thrt)-LTag=Link; /* 建頭結(jié)點 */ (*Thrt)-RTag=Thread; (*Thrt)-rchild=*Thrt; /* 右指針回指 */ if(!T) /*

8、若二叉樹空,則左指針回指 */ (*Thrt)-lchild=*Thrt; else (*Thrt)-lchild=T; pre=*Thrt; InThreading(T); /* 中序遍歷進行中序線索化 */ pre-rchild=*Thrt; pre-RTag=Thread; /* 最后一個結(jié)點線索化 */ (*Thrt)-rchild=pre; return OK; Status InOrderTraverse_Thr(BiThrTree T,Status(*Visit)(TElemType) /* 中序遍歷二叉線索樹T(頭結(jié)點)的非遞歸算法。算法6.5 */ BiThrTree p;

9、p=T-lchild; /* p指向根結(jié)點 */ while(p!=T) /* 空樹或遍歷結(jié)束時,p=T */ while(p-LTag=Link) p=p-lchild; if(!Visit(p-data) /* 訪問其左子樹為空的結(jié)點 */ return ERROR; while(p-RTag=Thread&p-rchild!=T) p=p-rchild; Visit(p-data); /* 訪問后繼結(jié)點 */ p=p-rchild; return OK; void main() BiThrTree H,T; #if CHAR printf(請按先序輸入二叉樹(如:ab三個空格表示a為根結(jié)

10、點,b為左子樹的二叉樹)n); #else printf(請按先序輸入二叉樹(如:1 2 0 0 0表示1為根結(jié)點,2為左子樹的二叉樹)n); #endif CreateBiThrTree(&T); /* 按先序產(chǎn)生二叉樹 */ InOrderThreading(&H,T); /* 中序遍歷,并中序線索化二叉樹 */ printf(中序遍歷(輸出)二叉線索樹:n); InOrderTraverse_Thr(H,vi); /* 中序遍歷(輸出)二叉線索樹 */ printf(n); 運行結(jié)果:算法思想:二叉樹:6-5:(以雙向線索鏈表為存儲結(jié)構(gòu)時對二叉樹進行遍歷的算法)仿照線性表的存儲結(jié)構(gòu),在二叉樹的線索鏈表上添加一個頭結(jié)點,并令其lchild域的指針指向二叉樹的根結(jié)點,其rchild域的指針指向中序遍歷時訪問的最后一個結(jié)點;反之,令二叉樹中序序列中的第一個結(jié)點的lchild域指針和最后一個結(jié)點rchild域的指針均指向頭結(jié)點。這好比為二叉樹建立了一個雙向線索鏈表,既可從第一個結(jié)點起順后繼進行遍歷,也可從最后一個結(jié)點起順前驅(qū)進行遍歷。6

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論