版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上題目:二叉排序樹的建立、插入、刪除和查找 完成日期:2016-11-10一、需求分析1、 運(yùn)行環(huán)境:VC+6.0;語言:C語言;程序所實(shí)現(xiàn)的功能:給出一組關(guān)鍵值,建立相應(yīng)的二叉排序樹,完成:1結(jié)點(diǎn)的刪除操作,插入一個(gè)新結(jié)點(diǎn)的操作2對(duì)給定的值在二叉排序樹進(jìn)行查找;3隨時(shí)顯示操作的結(jié)果。2、 程序的輸入:n個(gè)關(guān)鍵字,及要插入,刪除,查找的關(guān)鍵字;3、 程序的輸出:操作后的二叉排序樹的中序序列即遞增序列;4、 測試數(shù)據(jù):1)8 12 5 10 6 11 13 9 (n=8);10;7;11; 2)10 7 12 9 8 (n=5);10;6;10; 3) 8 5 6 (n=
2、3);6;9;8;二、概要設(shè)計(jì) 1、程序的主要流程圖: 否是開始建樹: 依次輸入n個(gè)關(guān)鍵字 插入二叉排序樹中 中序輸出創(chuàng)建過程刪除任意結(jié)點(diǎn)插入一個(gè)結(jié)點(diǎn)查找關(guān)鍵字中序輸出操作后二叉排序樹是否繼續(xù)結(jié)束2、主要模塊: 1)主函數(shù)模塊 Main()建立n個(gè)關(guān)鍵字的二叉排序樹并輸出;從二叉樹排序樹T中刪除任意結(jié)點(diǎn),其關(guān)鍵字為x;在二叉樹排序樹T中,插入一個(gè)結(jié)點(diǎn)t,其關(guān)鍵字為key1;在二叉排序樹T中遞歸查找關(guān)鍵字等于 key2 的數(shù)據(jù)元素;查找成功則輸出SUCCESS;查找失敗則輸出NOSUCCESS;2)創(chuàng)建二叉排序樹模塊BiTree CreatBST(int n)建立n個(gè)關(guān)鍵字的二叉排序樹; 從鍵盤
3、輸入調(diào)建立n個(gè)關(guān)鍵字依次用InsertBST1(插入函數(shù)); 返回根結(jié)點(diǎn)T; 輸出過程; 3)刪除模塊DeleteNode(BiTree &T, int x)從二叉樹排序樹T中刪除任意結(jié)點(diǎn),其關(guān)鍵字為x; 可以實(shí)現(xiàn)刪除根結(jié)點(diǎn)、葉子結(jié)點(diǎn)以及其它任意結(jié)點(diǎn)的功能; 4)插入模塊void InsertBST1(BiTree &T,BiTNode *s)在二叉樹排序樹T中,插入一個(gè)結(jié)點(diǎn)s(遞歸算法); 被CreatBST函數(shù)調(diào)用; 5)查找模塊BiTree SearchBST1(BiTree T,TElemType key)在根指針T所指二叉排序樹中遞歸查找關(guān)鍵字等于 key 的數(shù)據(jù)元素
4、; 若成功,返回指向該數(shù)據(jù)元素結(jié)點(diǎn)的指針; 否則返回空指針;3、抽象數(shù)據(jù)類型設(shè)計(jì); 對(duì)于二叉樹排序樹而言,每個(gè)節(jié)點(diǎn)都是由“數(shù)據(jù)域”、左右 “指針域”三部分組成的,因此將二叉樹抽象成一個(gè)指向根結(jié)點(diǎn)由“關(guān)鍵字,左右孩子”構(gòu)成 的二叉鏈表。三、詳細(xì)設(shè)計(jì) 1、二叉排序樹數(shù)據(jù)類型定義;typedef struct BiTNode TElemType data;struct BiTNode *lchild,*rchild;/左右孩子指針 BiTNode,*BiTree; BiTree T;/ 二叉樹排序樹T 2、主要函數(shù)說明:(偽代碼及算法設(shè)計(jì)思想) void main()T=CreatBST(n); /
5、建立n個(gè)關(guān)鍵字的二叉排序樹,返回根結(jié)點(diǎn)T /從二叉樹排序樹T中刪除任意結(jié)點(diǎn),其關(guān)鍵字為xDeleteNode(T, x);Inorder(T); /在二叉樹排序樹T中,插入一個(gè)結(jié)點(diǎn)t,其關(guān)鍵字為key1t=(BiTree)malloc(sizeof(BiTNode);t->data=key1;t->lchild=NULL; t->rchild=NULL; InsertBST1(T,t);Inorder(T);/在二叉排序樹T中遞歸查找關(guān)鍵字等于 key2 的數(shù)據(jù)元素s=SearchBST1(T,key2);if(s)printf("SUCESSn");/查
6、找成功else printf("NOSUCESSn");/查找失敗BiTree SearchBST1(BiTree T, TElemType key)/在根指針T所指二叉排序樹中遞歸查找關(guān)鍵字等于 key 的數(shù)據(jù)元素 /若成功,返回指向該數(shù)據(jù)元素結(jié)點(diǎn)的指針,否則返回空指針;s為返回/指針if(T=NULL) return NULL; if(T->data=key) s=T;else if(T->data>key) /key大于當(dāng)前結(jié)點(diǎn)的關(guān)鍵字 ,則查找左子樹s=SearchBST1(T->lchild,key);/key小于當(dāng)前結(jié)點(diǎn)的關(guān)鍵字則查找右子
7、樹 Else s=SearchBST1(T->rchild,key); return s;void Inorder(BiTree T)/中序輸出二叉樹排序樹T(非空時(shí))if(T!=NULL) Inorder(T->lchild);/中序輸出左子樹printf("%3d",T->data);/訪問結(jié)點(diǎn)Inorder(T->rchild);/中序輸出右子樹void InsertBST1(BiTree &T,BiTNode *s)/在二叉樹排序樹T中,插入一個(gè)結(jié)點(diǎn)s的遞歸算法t=SearchBST1(T,s->data);/若s的關(guān)鍵字不在T
8、中出現(xiàn),則插入if(!t)if(T=NULL)T=s; /空樹時(shí)作為根結(jié)點(diǎn) else if(s->data<T->data) InsertBST1(T->lchild,s); /將s插入T的左子樹else InsertBST1(T->rchild,s); /將s插入T的右子樹BiTree CreatBST(int n)/建立n個(gè)關(guān)鍵字的二叉排序樹, /從鍵盤輸入調(diào)建立n個(gè)關(guān)鍵字依次用InsertBST1(插入函數(shù)), /返回根結(jié)點(diǎn)TT=NULL; printf("建樹過程:n");for(i=1;i<=n;i+) printf("
9、;插入結(jié)點(diǎn)關(guān)鍵值:n");scanf(key); s=(BiTree)malloc(sizeof(BiTNode);/開辟存儲(chǔ)單元,并對(duì)結(jié)點(diǎn)賦值s->data=key;s->lchild=NULL; s->rchild=NULL;InsertBST1(T,s); /調(diào)用插入算法 Inorder(T);/中序輸出return T;DeleteNode(BiTree &T, int x)/從二叉樹排序樹T中刪除任意結(jié)點(diǎn),其關(guān)鍵字為x p=T; /從根結(jié)點(diǎn)開始查找 pParent = NULL; / T的雙親為NULL / 開始查找關(guān)鍵字為x的結(jié)點(diǎn)p,及雙親pPa
10、rent while (p) if (x = p->data) break; pParent = p; p = x > p->data ? p->rchild : p->lchild; if (p=NULL) printf("要?jiǎng)h除的結(jié)點(diǎn)不存在n"); return false; / 至此已找到目標(biāo)結(jié)點(diǎn)p / pChileNode = p存在的孩子或NULL,左右都存在時(shí),取左 pChileNode = p->lchild!= NULL ? p->lchild : p->rchild; if(p->lchild=NULL
11、|p->lchild=NULL) /當(dāng)只存在1個(gè)孩子或2個(gè)孩子(葉子結(jié)點(diǎn))都為空時(shí),if (pParent = NULL) / 如果要?jiǎng)h除的是根,則把根設(shè)為找到的孩/或NULL T= pChileNode; else / 如果要?jiǎng)h除的不是根 /判斷一下要?jiǎng)h除的結(jié)點(diǎn)是其雙親的左還是右孩子做相應(yīng)處理 if(p=pParent->lchild) /刪除結(jié)點(diǎn),雙親相應(yīng)的指針指向這個(gè)結(jié)點(diǎn)的孩子 pParent->lchild= pChileNode; else pParent->rchild = pChileNode; /同上 free(p);/釋放空間 / 當(dāng)2個(gè)孩子都存在時(shí)
12、else /pChileNode已指向p->lchildq=p; while (pChileNode->rchild) /在p的左字樹中查找中序p的前驅(qū)pChileNode,q為其雙親q=pChileNode; pChileNode = pChileNode->rchild; p->data=pChileNode->data;/p的前驅(qū)pChileNodede 的關(guān)鍵值賦給pif(q!=p) /將刪除p轉(zhuǎn)化為刪除pChileNodede(最多只有左字樹)結(jié)點(diǎn)q->rchild=pChileNode->lchild;/p的左字樹有右孩子else q-&g
13、t;lchild=pChileNode->lchild;/p的左字樹有右孩子free(pChileNode); return true; 四、上級(jí)結(jié)果及體會(huì)1、實(shí)際完成情況:實(shí)現(xiàn)二叉排序樹的建立、插入、刪除和查找功能; 支持的數(shù)據(jù)類型:二叉鏈表。2、程序的性能分析:假設(shè)n個(gè)結(jié)點(diǎn)的二叉排序樹 創(chuàng)建:T(n)=O(n);刪除:T(n)=O(n);插入:T(n)=O(1) 查找:T(n)=O(logn);中序輸出:T(n)=O(n); 故程序:T(n)=O(n+logn)3、源程序,程序運(yùn)行時(shí)的初值和運(yùn)行結(jié)果(見附件)4、程序的擴(kuò)充和改進(jìn): 關(guān)鍵字類型可改為其他類型5、上機(jī)過程中出現(xiàn)的問題及其解決方案: 1)在編碼刪除結(jié)點(diǎn)DeleteNode函數(shù)的過程中遇到無法運(yùn)行的問題,經(jīng)請教老師,得到一定的提示:函數(shù)設(shè)計(jì)思路要理清; 2)在刪除根結(jié)點(diǎn)時(shí)出現(xiàn)不能執(zhí)行刪除結(jié)點(diǎn)左右子樹都存在的情況,魏近同學(xué)給出提示:結(jié)點(diǎn)轉(zhuǎn)換的思想; 6、收獲及體會(huì): 通過這次的課程設(shè)計(jì),我認(rèn)識(shí)到:僅僅掌握課本上的知識(shí)是不夠的,在實(shí)際操作時(shí),常常遇到一些問題,自己看不懂,更無法解決。不過,經(jīng)過自己不斷的思考,嘗試著去更改代碼中出現(xiàn)的問題。雖然開始很困難,但在老師和同學(xué)的幫助下,我逐漸的熟悉了許多操作,為后繼工作的順利進(jìn)行做了準(zhǔn)備
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 摩托車駕駛培訓(xùn)中心加盟合同20253篇
- 二零二五版內(nèi)墻涂料市場調(diào)研與分析服務(wù)合同4篇
- 2025年度農(nóng)業(yè)資源調(diào)查與評(píng)價(jià)合同3篇
- 2025年陜西西安經(jīng)發(fā)置業(yè)有限公司招聘筆試參考題庫含答案解析
- 2025年湖北武漢地鐵運(yùn)營有限公司招聘筆試參考題庫含答案解析
- 2025年江西大展文化傳播有限公司招聘筆試參考題庫含答案解析
- 2025年山東威海遠(yuǎn)遙漁港有限公司招聘筆試參考題庫含答案解析
- 2025年甘肅信達(dá)通信技術(shù)有限公司招聘筆試參考題庫含答案解析
- 2025年度個(gè)人網(wǎng)絡(luò)購物分期付款合同模板4篇
- 2025年度個(gè)人信用卡透支還款協(xié)議模板3篇
- 大學(xué)生職業(yè)規(guī)劃大賽生涯發(fā)展報(bào)告
- 旅居管家策劃方案
- GB/T 26316-2023市場、民意和社會(huì)調(diào)查(包括洞察與數(shù)據(jù)分析)術(shù)語和服務(wù)要求
- 春節(jié)值班安全教育培訓(xùn)
- 鋰離子電池生產(chǎn)工藝流程圖
- 帶狀皰疹護(hù)理查房
- 平衡計(jì)分卡-化戰(zhàn)略為行動(dòng)
- 幼兒園小班下學(xué)期期末家長會(huì)PPT模板
- 維克多高中英語3500詞匯
- 幼兒教師干預(yù)幼兒同伴沖突的行為研究 論文
- 湖南省省級(jí)溫室氣體排放清單土地利用變化和林業(yè)部分
評(píng)論
0/150
提交評(píng)論