下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(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 【說明】1. 按先序次序輸入二叉樹中結(jié)點(diǎn)的值,用#表示空樹,對(duì)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)人財(cái)產(chǎn)抵押借款簡(jiǎn)易協(xié)議文本版A版
- 二零二四全新石灰石環(huán)保綜合利用合同3篇
- 2024版特種設(shè)備吊裝運(yùn)輸合同3篇
- 個(gè)人房產(chǎn)買賣規(guī)范協(xié)議2024版A版
- 2024年04月中國建設(shè)銀行北京市分行度社會(huì)招考專業(yè)人才筆試歷年參考題庫附帶答案詳解
- 2025年農(nóng)業(yè)科技推廣合同會(huì)簽紀(jì)要3篇
- 2024版輪胎承包合同協(xié)議書
- 二零二五年度物流并購保密及市場(chǎng)共享協(xié)議2篇
- 專業(yè)節(jié)電器產(chǎn)品銷售協(xié)議規(guī)范2024版A版
- 2024年03月貴州貴州銀行六盤水分行招考筆試歷年參考題庫附帶答案詳解
- GB/T 12914-2008紙和紙板抗張強(qiáng)度的測(cè)定
- GB/T 1185-2006光學(xué)零件表面疵病
- ps6000自動(dòng)化系統(tǒng)用戶操作及問題處理培訓(xùn)
- 家庭教養(yǎng)方式問卷(含評(píng)分標(biāo)準(zhǔn))
- 城市軌道交通安全管理課件(完整版)
- 線纜包覆擠塑模設(shè)計(jì)和原理
- TSG ZF001-2006 安全閥安全技術(shù)監(jiān)察規(guī)程
- 部編版二年級(jí)語文下冊(cè)《蜘蛛開店》
- 鍋爐升降平臺(tái)管理
- 200m3╱h凈化水處理站設(shè)計(jì)方案
- 個(gè)體化健康教育記錄表格模板1
評(píng)論
0/150
提交評(píng)論