




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)驗(yàn)十:高校本科招生最低錄取分?jǐn)?shù)線查詢系統(tǒng)【問題描述】 二叉樹采用二叉鏈表作存儲(chǔ)結(jié)構(gòu),編程實(shí)現(xiàn)二叉樹的如下基本操作:按先序序列構(gòu)造一棵二叉鏈表表示的二叉樹 T;對(duì)這棵二叉樹進(jìn)行遍歷:先序、中序、后序以及層次遍歷序列,分別輸出結(jié)點(diǎn)的遍歷序 列;求二叉樹的深度/結(jié)點(diǎn)數(shù)目/葉結(jié)點(diǎn)數(shù)目;【數(shù)據(jù)描述】/ 二叉樹的二叉鏈表存儲(chǔ)表示 typedef struct BiTNodeTElemType data;Struct BiTNode * lchild, * rchild; /左右孩子指針BiTNode, * BiTree;【算法描述】建立一棵二叉樹 BiTree CreateBiTree(BiTree &
2、T) / 算法6.4/ 按先序次序輸入二叉樹中結(jié)點(diǎn)的值(一個(gè)字符),空格字符表示空樹, /構(gòu)造二叉鏈表表示的二叉樹T。char ch;scanf(%c,&ch);if (ch=#) T = NULL;else if (!(T = (BiTNode *)malloc(sizeof(BiTNode) return ERROR; T-data = ch;/ 生成根結(jié)點(diǎn)CreateBiTree(T-lchild);/ 構(gòu)造左子樹CreateBiTree(T-rchild);/ 構(gòu)造右子樹return T; / CreateBiTree先序遍歷二叉樹遞歸算法void Preorder (BiTree T
3、, void( *visit)(TElemType& e) / 先序遍歷二叉樹if (T) visit(T-data); / 訪問結(jié)點(diǎn) Preorder(T-lchild, visit); / 遍歷左子樹 Preorder(T-rchild, visit);/ 遍歷右子樹中序遍歷的遞歸算法void Inorder (BiTree T, void( *visit)(TElemType& e) / 中序遍歷二叉樹if (T) Inorder(T-lchild, visit); / 遍歷左子樹 visit(T-data); / 訪問結(jié)點(diǎn) Inorder(T-rchild, visit);/ 遍歷右子
4、樹后序遍歷遞歸算法void Postorder (BiTree T, void( *visit)(TElemType& e) / 后序遍歷二叉樹if (T) Postorder(T-lchild, visit); / 遍歷左子樹 Postorder(T-rchild, visit);/ 遍歷右子樹 visit(T-data); / 訪問結(jié)點(diǎn)中序遍歷非遞歸算法之一Status InOrderTraverse(BiTree T, Status (*Visit)(ElemType) / 算法6.2/采用二叉鏈表存儲(chǔ)結(jié)構(gòu),Visit是對(duì)數(shù)據(jù)元素操作的應(yīng)用函數(shù)。 /中序遍歷二叉樹T的非遞歸算法,對(duì)每個(gè)數(shù)
5、據(jù)元素調(diào)用函數(shù)Visit。 stack S;BiTree p;InitStack(S); Push(S, T); / 根指針進(jìn)棧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; / InOrderTraverse中序遍歷非遞歸算法之二Status InOrderT
6、raverse(BiTree T, Status (*Visit)(ElemType) / 算法 6.3/采用二叉鏈表存儲(chǔ)結(jié)構(gòu),Visit是對(duì)數(shù)據(jù)元素操作的應(yīng)用函數(shù)。/中序遍歷二叉樹T的非遞歸算法,對(duì)每個(gè)數(shù)據(jù)元素調(diào)用函數(shù)Visit。stack S;BiTree p;InitStack(S); p = T;while (p | !StackEmpty(S) if (p) Push(S, p); p = p-lchild; /非空指針進(jìn)棧,繼續(xù)左 進(jìn)else / 上層指針退棧,訪問其所指結(jié)點(diǎn),再向右進(jìn)Pop(S, p);if (!Visit(p-data) return ERROR;p = p-r
7、child;return OK; / InOrderTraverse7 層次遍歷二叉樹的非遞歸算法Status LevelOrder(BiTree T)按層次遍歷二叉樹T, Q為隊(duì)列InitQueue(Q);If (T!=NULL)/ 若樹非空EnQueue(Q,T);根結(jié)點(diǎn)入隊(duì)列While (!QueueEmpty(Q)DeQueue(Q,b); /隊(duì)首元素出隊(duì)列Visit(b-data); /訪問結(jié)點(diǎn)If (b-lchild!=NULL) EnQueue(Q,b-lchild);左子樹非空,則入隊(duì)列If (b-rchold!=Null) EnQueue(Q,b-rchild); 右子樹非空
8、,則入隊(duì)列/while/ifLevelOrder8 求二叉樹的深度int depth(BiTree T)若T為空樹,則深度為0否則其深度等于左子樹或右子樹的最大深度加1if (T=NULL) return 0;else dep1=depth(T-lchild);dep2=depth(T-rchild);return dep1dep2?dep1+1:dep2+1;【C 源程序】#include #include #define MAX 20#define NULL 0typedef char TElemType;typedef int Status;typedef struct BiTNodeT
9、ElemType data;struct BiTNode *lchild,*rchild;BiTNode,*BiTree;Status CreateBiTree(BiTree *T)char ch; ch=getchar();if (ch=#) (*T)=NULL;/* #代表空指針*/else (*T)=(BiTree) malloc(sizeof(BiTNode);/* 申請(qǐng)結(jié)點(diǎn) */(*T)-data=ch;/*生成根結(jié)點(diǎn) */CreateBiTree(&(*T)-lchild) ;/*構(gòu)造左子樹 */CreateBiTree(&(*T)-rchild) ;/*構(gòu)造右子樹 */retur
10、n 1;void PreOrder(BiTree T)if (T) printf(%2c,T-data); /*訪問根結(jié)點(diǎn),此處簡(jiǎn)化為輸出根結(jié)點(diǎn)的數(shù)據(jù)值*/PreOrder(T-lchild); /*先序遍歷左子樹*/PreOrder(T-rchild); /*先序遍歷右子樹*/void LevleOrder(BiTree T)/*層次遍歷二叉樹T,從第一層開始,每層從左到右*/BiTree QueueMAX,b;/*用一維數(shù)組表示隊(duì)列,front和rear分別表示隊(duì)首和隊(duì)尾指針 */BiTree QueueMAX,b;int front,rear;front=rear=0;/*根結(jié)點(diǎn)入隊(duì)列*
11、/*當(dāng)隊(duì)列非空/*根結(jié)點(diǎn)入隊(duì)列*/*當(dāng)隊(duì)列非空*/*隊(duì)首元素出隊(duì)列,并訪問這個(gè)結(jié)點(diǎn)*/Queuerear+=T; while (front!=rear) b=Queuefront+;printf(%2c,b-data);if (b-lchild!=NULL) Queuerear+=b-lchild; /*左子樹非空,則入隊(duì)列*/ if (b-rchild!=NULL) Queuerear+=b-rchild; /*右子樹非空,則入隊(duì)列*/LevelOrderint depth(BiTree T) /*求二叉樹的深度*/int dep1,dep2; if (T=NULL) return 0;el
12、se dep1=depth(T-lchild); dep2=depth(T-rchild); return dep1dep2?dep1+1:dep2+1;/depthmain()BiTree T=NULL;printf(nCreate a Binary Treen); CreateBiTree(&T); /*建立一棵二叉樹 T*/ printf(nThe preorder is:n);PreOrder(T);/*先序遍歷二叉樹*/printf(nThe level order is:n);LevleOrder(T); /*層次遍歷二叉樹*/ printf(nThe depth is:%dn,depth(T); 【測(cè)試數(shù)據(jù)】輸入:#/,建立一棵空樹,先序遍歷和層次遍歷沒有輸出,樹的深度輸出為 0輸入:A/先序和層次遍歷輸出均為 A;深度輸出為: 1輸入:ABC#DE#G#F#/,先序輸出為: AB C D E G F層次遍歷輸出為: A B C D E F G深度輸出為: 5二叉樹中葉子結(jié)點(diǎn)的個(gè)數(shù): 3二叉樹中以值為 B 的結(jié)點(diǎn)為根的子樹深度: 4 【說(shuō)明】1. 按先序次序輸入二叉樹中結(jié)點(diǎn)的值,用#表示空樹,對(duì)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 北師大版二年級(jí)下冊(cè)第5單元語(yǔ)文試卷A卷
- 北京版四年級(jí)上冊(cè)期中測(cè)試語(yǔ)文試卷
- 2025年茅臺(tái)酒項(xiàng)目招商引資報(bào)告
- 基礎(chǔ)知識(shí)精練課件:3.3 第2課時(shí) 多項(xiàng)式
- 一年級(jí)上冊(cè)綜合實(shí)踐活動(dòng)計(jì)劃
- 胸腔腫物護(hù)理個(gè)案教育
- 老年人群體公共衛(wèi)生服務(wù)管理流程
- 永不放棄心理健康教育主題班會(huì)
- 劉志軍案件對(duì)金融行業(yè)合規(guī)管理的心得體會(huì)
- 桂林智能制造項(xiàng)目可行性分析報(bào)告
- 海水的淡化技術(shù)及應(yīng)用
- 叮咚智能鎖說(shuō)明書
- 嘉世咨詢 -2024眼科診療行業(yè)簡(jiǎn)析報(bào)告
- 手機(jī)拍攝短視頻
- DB32T 4719-2024酒店服務(wù)與廚師職業(yè)技能等級(jí)認(rèn)定工作規(guī)范
- 2024年湖南省郴州湘能農(nóng)電服務(wù)有限公司招聘筆試參考題庫(kù)含答案解析
- 加油站安全風(fēng)險(xiǎn)分級(jí)管控和隱患排查治理雙重預(yù)防機(jī)制運(yùn)行手冊(cè)
- 2024年度安徽白帝集團(tuán)限公司社會(huì)招聘高頻考題難、易錯(cuò)點(diǎn)模擬試題(共500題)附帶答案詳解
- 2023年遼寧卷物理高考試卷(含答案)
- 攻博計(jì)劃書模版
- 2013黑龍江公務(wù)員職位表
評(píng)論
0/150
提交評(píng)論