版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、考試學(xué)資學(xué)習(xí)網(wǎng)押題二叉樹的各種算法 .txt 男人的承諾就像80 歲 xx 的牙齒,很少有真的。你嗜煙成性的時(shí)候,只有三種人會(huì)高興, 醫(yī)生 你的仇人和賣香煙的。 /*用函數(shù)實(shí)現(xiàn)如下二叉排序樹算法:( 1) 插入新結(jié)點(diǎn)( 2) 前序、中序、后序遍歷二叉樹( 3) 中序遍歷的非遞歸算法( 4) 層次遍歷二叉樹( 5) 在二叉樹中查找給定關(guān)鍵字(函數(shù)返回值為成功 1,失敗 0)( 6) 交換各結(jié)點(diǎn)的左右子樹( 7) 求二叉樹的深度( 8) 葉子結(jié)點(diǎn)數(shù)Input第一行:準(zhǔn)備建樹的結(jié)點(diǎn)個(gè)數(shù)n第二行:輸入n 個(gè)整數(shù),用空格分隔第三行:輸入待查找的關(guān)鍵字第四行:輸入待查找的關(guān)鍵字第五行:輸入待插入的關(guān)鍵字O
2、utput第一行:二叉樹的先序遍歷序列第二行:二叉樹的中序遍歷序列第三行:二叉樹的后序遍歷序列1 / 15第四行:查找結(jié)果第五行:查找結(jié)果第六行第八行:插入新結(jié)點(diǎn)后的二叉樹的先、中、序遍歷序列第九行:插入新結(jié)點(diǎn)后的二叉樹的中序遍歷序列(非遞歸算法)第十行:插入新結(jié)點(diǎn)后的二叉樹的層次遍歷序列第十一行第十三行:第一次交換各結(jié)點(diǎn)的左右子樹后的先、中、后序遍歷序列第十四行第十六行:第二次交換各結(jié)點(diǎn)的左右子樹后的先、中、后序遍歷序列第十七行:二叉樹的深度第十八行:葉子結(jié)點(diǎn)數(shù)# /#include stdio.h#include malloc.h# define TRUE 1# define FALSE
3、0#define OK 1#define ERROR 0#define INFEASIBLE -1 #define OVERFLOW -2typedef int Status;typedef int KeyType;2 / 15#define STACK_INIT_SIZE 100存儲(chǔ)空間初始分配量/#define STACKINCREMENT 10存儲(chǔ)空間分配增量/#define MAXQSIZE 100typedef int ElemType;typedef struct BiTNodeElemType data;struct BiTNode *lchild,*rchild;/ 左右孩子指
4、針 BiTNode,*BiTree;Status SearchBST(BiTree T,KeyType key,BiTree f,BiTree &p)if(!T)p=f;return FALSE;else if(key=T-data)p=T;return TRUE;else if(keydata)return SearchBST(T-lchild,key,T,p);else return(SearchBST(T-rchild,key,T,p);Status InsertBST(BiTree &T,ElemType e)BiTree s,p;if(!SearchBST(T,e,NULL,p)s=
5、(BiTree)malloc(sizeof(BiTNode);3 / 15s-data=e;s-lchild=s-rchild=NULL;if(!p)T=s;else if(edata)p-lchild=s;else p-rchild=s;return TRUE;else return FALSE;Status PrintElement( ElemType e ) / 輸出元素 e 的值printf(%d , e );return OK;/ PrintElementStatus PreOrderTraverse( BiTree T, Status(*Visit)(ElemType) ) / 前
6、序遍歷二叉樹T 的遞歸算法,對(duì)每個(gè)數(shù)據(jù)元素調(diào)用函數(shù)Visit/ 補(bǔ)全代碼,可用多個(gè)語句if(T)if(Visit(T-data)if(PreOrderTraverse(T-lchild,Visit)if(PreOrderTraverse(T-rchild,Visit)return OK;return ERROR;4 / 15else return OK; / PreOrderTraverseStatus InOrderTraverse( BiTree T, Status(*Visit)(ElemType) )Visit。/ 中序遍歷二叉樹T 的遞歸算法,對(duì)每個(gè)數(shù)據(jù)元素調(diào)用函數(shù)/ 補(bǔ)全代碼,可用
7、多個(gè)語句if(T)if(InOrderTraverse(T-lchild,Visit)if(Visit(T-data)if(InOrderTraverse(T-rchild,Visit)return OK;return ERROR;else return OK; / InOrderTraverseStatus PostOrderTraverse( BiTree T, Status(*Visit)(ElemType) ) / 后序遍歷二叉樹T 的遞歸算法,對(duì)每個(gè)數(shù)據(jù)元素調(diào)用函數(shù)Visit/ 補(bǔ)全代碼,可用多個(gè)語句if(T)5 / 15if(PostOrderTraverse(T-lchild,V
8、isit)if(PostOrderTraverse(T-rchild,Visit)if(Visit(T-data)return OK;return ERROR;else return OK; / PostOrderTraverseStatus Putout(BiTree T)PreOrderTraverse(T,PrintElement);printf( );InOrderTraverse(T, PrintElement);printf();PostOrderTraverse(T,PrintElement);printf();return OK;/非遞歸算法struct SqStack6 /
9、15BiTree *base; / 在棧構(gòu)造之前和銷毀之后, base 的值為 NULLBiTree *top; / 棧頂指針int stacksize; / 當(dāng)前已分配的存儲(chǔ)空間,以元素為單位; / 順序棧Status InitStack(SqStack &S)S.base=(BiTree *)malloc(STACK_INIT_SIZE*sizeof(BiTree);if(!S.base)return ERROR;S.top=S.base;S.stacksize=STACK_INIT_SIZE;return OK;Status Push(SqStack &S,BiTree e)if(S.t
10、op-S.base)=S.stacksize)S.base=(BiTree*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(BiTree);if(!S.base)return ERROR;S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;7 / 15*S.top+=e;return OK;Status Pop(SqStack &S,BiTree &e)if(S.top=S.base)return ERROR;e=*-S.top;return OK;Status StackEmpty(
11、SqStack S)/若棧S為空棧,則返回TRUE否則返回FALSEif(S.top-S.base=0)return TRUE;else return FALSE;Status InOrderTraverse1(BiTree T,Status(*Visit)(ElemType e),SqStack S)BiTree p;InitStack(S);p=T;while(p|!StackEmpty(S)if(p)Push(S,p);p=p-lchild;8 / 15elsePop(S,p);if(!Visit(p-data)return ERROR;p=p-rchild;return OK;/層次遍
12、歷typedef structBiTree *base; / 初始化的動(dòng)態(tài)分配存儲(chǔ)空間int front; / 頭指針,若隊(duì)列不空,指向隊(duì)列頭元素int rear; / 尾指針 ,若隊(duì)列不空 ,指向隊(duì)列尾元素的下一個(gè)位置SqQueue;Status InitQueue(SqQueue &Q)Q.base=(BiTree*)malloc(MAXQSIZE*sizeof(BiTree);if(!Q.base)return ERROR;Q.front=Q.rear=0;9 / 15return OK;int QueueLength(SqQueue Q)/ 返回 Q 的元素個(gè)數(shù)/ 請(qǐng)補(bǔ)全代碼retur
13、n(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;Status EnQueue(SqQueue &Q,BiTree e)/ 插入元素 e 為 Q 的新的隊(duì)尾元素/ 請(qǐng)補(bǔ)全代碼if(Q.rear+1)%MAXQSIZE=Q.front)return ERROR;Q.baseQ.rear=e;Q.rear=(Q.rear+1)%MAXQSIZE;return OK;Status DeQueue(SqQueue &Q,BiTree &e)/若隊(duì)列不空,則刪除Q的隊(duì)頭元素,用e返回其值,并返回OK;否則返回 ERROR/ 請(qǐng)補(bǔ)全代碼10 / 15if(Q.front=Q.rear
14、)return ERROR;e=Q.baseQ.front;Q.front=(Q.front+1)%MAXQSIZE;return OK;Status LevelTraverse(BiTree T,SqQueue 理歡遍歷二叉樹InitQueue(Q);BiTree p;p=T;if(T)EnQueue(Q,T);/ printf(%d,QueueLength(Q);while(QueueLength(Q)!=0)DeQueue(Q,p); / 根結(jié)點(diǎn)出隊(duì)printf(%d ,p-data); / 輸出數(shù)據(jù)if(p-lchild)EnQueue(Q,p-lchild); / 左孩子進(jìn)隊(duì) if(
15、p-rchild)EnQueue(Q,p-rchild); / 右孩子進(jìn)隊(duì) return OK; 11 / 15void Change(BiTree T)BiTNode *p;if(T)p=T-lchild;T-lchild=T-rchild;T-rchild=p;Change(T-lchild);Change(T-rchild);/ return OK;int BTreeDepth(BiTree T)求由BT指針指向的一棵二叉樹的深度/ int dep1,dep2;if(T!=NULL)/ 計(jì)算左子樹的深度int dep1=BTreeDepth(T-lchild);/ 計(jì)算右子樹的深度12
16、/ 15int dep2=BTreeDepth(T-rchild);/ 返回樹的深度if(dep1dep2)return dep1+1;elsereturn dep2+1;else return 0;葉子結(jié)點(diǎn)數(shù) Status yezhi(BiTree T,SqQueue Q)int i=0;InitQueue(Q);BiTree p;p=T;if(T)EnQueue(Q,T);/ printf(%d,QueueLength(Q);while(QueueLength(Q)!=0)DeQueue(Q,p);13 / 15if(p-lchild)EnQueue(Q,p-lchild);if(p-rchild)EnQueue(Q,p-rchild);if(!p-lchild&!p-rchild)i+;return i;int main() / 主函數(shù)SqStack S;SqQueue Q,Q3;BiTree T=NULL,f,p;int i,n,e,a,b,c;scanf(%d,&n);for(i=0;in;i+)scanf(%d,&e);InsertBST(T,e);scanf(%d,&a);scanf(%d,&b);scanf(%d,&c);Putout(T);printf(%dn,SearchBST(T,a,f
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑承包合同模板2024
- 2025店鋪出租合同書范文
- 2025認(rèn)購權(quán)合同書范文
- 科技安全如何有效設(shè)計(jì)培訓(xùn)課程
- 課題申報(bào)參考:量化自我技術(shù)中的數(shù)據(jù)保護(hù)研究
- 2024年高純氧化鈮、氧化鉭項(xiàng)目資金申請(qǐng)報(bào)告代可行性研究報(bào)告
- 通過藝術(shù)培養(yǎng)孩子的領(lǐng)導(dǎo)力與團(tuán)隊(duì)協(xié)作能力
- 【研報(bào)】漂浮式海上風(fēng)電專題研究:向深遠(yuǎn)海進(jìn)發(fā)
- 二零二五年度360有錢聯(lián)盟(戰(zhàn)略版)大數(shù)據(jù)分析合作框架合同2篇
- 2025年標(biāo)準(zhǔn)存貨質(zhì)押合同模板
- 《天潤乳業(yè)營運(yùn)能力及風(fēng)險(xiǎn)管理問題及完善對(duì)策(7900字論文)》
- 醫(yī)院醫(yī)學(xué)倫理委員會(huì)章程
- xx單位政務(wù)云商用密碼應(yīng)用方案V2.0
- 2024-2025學(xué)年人教版生物八年級(jí)上冊(cè)期末綜合測試卷
- 動(dòng)土作業(yè)專項(xiàng)安全培訓(xùn)考試試題(帶答案)
- 大學(xué)生就業(yè)指導(dǎo)(高職就業(yè)指導(dǎo)課程 )全套教學(xué)課件
- 死亡病例討論總結(jié)分析
- 第二章 會(huì)展的產(chǎn)生與發(fā)展
- 空域規(guī)劃與管理V2.0
- JGT266-2011 泡沫混凝土標(biāo)準(zhǔn)規(guī)范
- 商戶用電申請(qǐng)表
評(píng)論
0/150
提交評(píng)論