二叉排序樹運(yùn)算-數(shù)據(jù)結(jié)構(gòu)及算法課程設(shè)計(jì)報(bào)告_l_第1頁
二叉排序樹運(yùn)算-數(shù)據(jù)結(jié)構(gòu)及算法課程設(shè)計(jì)報(bào)告_l_第2頁
二叉排序樹運(yùn)算-數(shù)據(jù)結(jié)構(gòu)及算法課程設(shè)計(jì)報(bào)告_l_第3頁
二叉排序樹運(yùn)算-數(shù)據(jù)結(jié)構(gòu)及算法課程設(shè)計(jì)報(bào)告_l_第4頁
二叉排序樹運(yùn)算-數(shù)據(jù)結(jié)構(gòu)及算法課程設(shè)計(jì)報(bào)告_l_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、-. z.*學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系課程設(shè)計(jì)報(bào)告20092010學(xué)年第二 學(xué)期課程數(shù)據(jù)構(gòu)造與算法課程設(shè)計(jì)名稱二叉排序樹運(yùn)算學(xué)生*顧成方*0704011033專業(yè)班級08計(jì)科(2)指導(dǎo)教師王昆侖 *貫虹2010年5 月題目:二叉排序樹運(yùn)算問題設(shè)計(jì)程序完成如下要求:對一組數(shù)據(jù)構(gòu)造二叉排序樹,并在二叉排序樹中實(shí)現(xiàn)多種方式的查找。根本任務(wù):選擇適宜的儲存構(gòu)造構(gòu)造二叉排序樹;對二叉排序樹T作中序遍歷,輸出結(jié)果;在二叉排序樹中實(shí)現(xiàn)多種方式的查找,并給出二叉排序樹中插入和刪除的操作。盡量給出順序和鏈?zhǔn)絻煞N不同構(gòu)造下的操作,并比擬。問題分析和任務(wù)定義本次程序需要完成如下要求:首先輸入任一組數(shù)據(jù),使之構(gòu)造成二叉排

2、序樹,并對其作中序遍歷,然后輸出遍歷后的數(shù)據(jù)序列;其次,該二叉排序樹能實(shí)現(xiàn)對數(shù)據(jù)即二叉排序樹的結(jié)點(diǎn)的查找、插入和刪除等根本操作。實(shí)現(xiàn)本程序需要解決以下幾個(gè)問題:如何構(gòu)造二叉排序樹。如何通過中序遍歷輸出二叉排序樹。如何實(shí)現(xiàn)多種查找。如何實(shí)現(xiàn)插入刪除等操作。二叉排序樹的定義:其左子樹非空,則左子樹上所有結(jié)點(diǎn)的值均小于根結(jié)點(diǎn)的值。假設(shè)其右子樹非空,則右子樹上所有結(jié)點(diǎn)的值大于根結(jié)點(diǎn)的值。其左右子樹也分別為二叉排序樹。本問題的關(guān)鍵在于對于二叉排序樹的構(gòu)造。根據(jù)上述二叉排序樹二叉排序樹的生成需要通過插入算法來實(shí)現(xiàn):輸入插入的第一個(gè)數(shù)據(jù)即為根結(jié)點(diǎn);繼續(xù)插入,當(dāng)插入的新結(jié)點(diǎn)的關(guān)鍵值小于根結(jié)點(diǎn)的值時(shí)就作為左孩子

3、,當(dāng)插入的新結(jié)點(diǎn)的關(guān)鍵值大于根結(jié)點(diǎn)的值時(shí)就作為右孩子;在左右子樹中插入方法與整個(gè)二叉排序樹一樣。當(dāng)二叉排序樹建立完成后,要插入新的數(shù)據(jù)時(shí),要先判斷已建立的二叉排序樹序列中是否已有當(dāng)前插入數(shù)據(jù)。因此,插入算法還要包括對數(shù)據(jù)的查找判斷過程。本問題的難點(diǎn)在于二叉排序樹的刪除算法的實(shí)現(xiàn)。刪除前,首先要進(jìn)展查找,判斷給出的結(jié)點(diǎn)是否已存在于二叉排序樹之中;在刪除時(shí),為了保證刪除結(jié)點(diǎn)后的二叉樹仍為二叉排序樹,要考慮各種情況,選擇正確的方法。刪除操作要分幾種情況討論,在后面有介紹。概要設(shè)計(jì)和數(shù)據(jù)構(gòu)造選擇用二叉鏈表作為二叉排序樹的存儲構(gòu)造,其中key為結(jié)點(diǎn)關(guān)鍵值,*lchlid、*rchild分別為左右孩子指針

4、。該程序的構(gòu)造如下列圖所示:Main()先建立一棵二叉排序樹,并輸出其中序排序后的序列二叉排序樹的查找二叉排序樹的插入二叉排序樹的刪除二叉排序樹的顯示非遞歸查找遞歸查找詳細(xì)設(shè)計(jì)和編碼首先定義二叉排序樹的數(shù)據(jù)類型如下:typedef struct nodeint key;/關(guān)鍵字項(xiàng)struct node *lchild,*rchild;/左右孩子指針Bstnode;然后按一定順序來編寫算法程序:遞歸查找算法具體思想如下:1假設(shè)二叉樹為空,則查找失敗。2否則,將根結(jié)點(diǎn)的關(guān)鍵值與待查關(guān)鍵字進(jìn)展比擬,假設(shè)相等,則查找成功;假設(shè)根結(jié)點(diǎn)關(guān)鍵值大于待查值,則進(jìn)入左子樹重復(fù)此步驟,否則,進(jìn)入右子樹重復(fù)此步驟;

5、假設(shè)在查找過程的中遇到二叉排序樹的葉子結(jié)點(diǎn)時(shí),還沒有找到待查結(jié)點(diǎn),則查找不成功。if(t=NULL)return NULL;elseif(t-data=*)return t;if(*data)return(Bsearch(t-lchild,*);elsereturn(Bsearch(t-rchild,*); 二叉排序樹遞歸查找算法流程圖非遞歸查找算法查找過程是從根結(jié)點(diǎn)開場逐層向下進(jìn)展的。并定義一個(gè)標(biāo)記量記錄是否找到結(jié)點(diǎn)。Bstnode *searchBST(Bstnode *t,int *)Bstnode *p;int flag=0;p=t;/定義*p結(jié)點(diǎn)用于逐層查找,叢根結(jié)點(diǎn)開場查找whil

6、e(p!=NULL)/二叉排序樹不為空 if(p-key=*)/查找成功printf(該結(jié)點(diǎn)值存在!);flag=1;break;/查找不成功,到下一層繼續(xù)查找 if(*key)p=p-lchild;/查找左子樹elsep=p-rchild;/查找右子樹if(flag=0)printf(找不到值為%d的結(jié)點(diǎn)!,*);p=NULL;return p;插入算法從根結(jié)點(diǎn)開場,根據(jù)比擬規(guī)則,逐一與待插入結(jié)點(diǎn)的值比擬,查找到插入結(jié)點(diǎn)在二叉排序樹中的未來位置,然后插入該結(jié)點(diǎn)。將一個(gè)關(guān)鍵字的值為*的結(jié)點(diǎn)s插入到二叉排序樹中,方法如下:1假設(shè)二叉排序樹為空,則關(guān)鍵字值為*的結(jié)點(diǎn)s成為二叉排序樹的根。2假設(shè)二叉

7、排序樹非空,則將*與二叉排序樹的根進(jìn)展比擬,如果*的值等于根結(jié)點(diǎn)關(guān)鍵字的值,則停頓插入;如果*的值小于根結(jié)點(diǎn)關(guān)鍵字的值,則將*插入左子樹;如果*的值大于根結(jié)點(diǎn)關(guān)鍵字的值,則將*插入右子樹。在左右子樹中插入方法與整個(gè)二叉排序樹一樣。Bstnode *InsertBST(Bstnode *t,int *)/ 插入關(guān)鍵值為*的元素Bstnode *s,*p,*f;/*s為待插結(jié)點(diǎn),*p為逐層查找結(jié)點(diǎn),*f為待插結(jié)點(diǎn)的父結(jié)點(diǎn)p=t;while(p!=NULL)f=p;/查找過程中,f指向*p的父結(jié)點(diǎn)if(*=p-key)/假設(shè)二叉樹中已有關(guān)鍵值為*的元素,無需插入return t;if(*key)p=

8、p-lchild;elsep=p-rchild;s=(Bstnode *)malloc(sizeof(Bstnode);s-key=*;s-lchild=NULL;s-rchild=NULL;if(t=NULL)/原樹為空,新結(jié)點(diǎn)作為二叉排序樹的根return s;if(*key)f-lchild=s;/新結(jié)點(diǎn)作為*f左孩子else f-rchild=s;/新結(jié)點(diǎn)作為*f右孩子return t;二叉排序樹的生成算法建立二叉排序樹,就是反復(fù)在二叉排序樹中插入新的結(jié)點(diǎn)。插入的原則是如果待插入結(jié)點(diǎn)的值小于根結(jié)點(diǎn)的值,則插入到左子樹中,否則插入到右子樹中。大致方法是:首先建一棵空二叉排序樹,然后逐個(gè)讀

9、入元素,每讀入一個(gè)元素,就建一個(gè)新結(jié)點(diǎn),并調(diào)用上述二叉排序樹的插入算法,將新結(jié)點(diǎn)插入到當(dāng)前已生成的二叉排序樹中,最終生成一棵二叉排序樹。Bstnode *CreateBST()Bstnode *t;int key;t=NULL;/設(shè)置二叉排序樹的初態(tài)為空scanf(%d,&key);while(key!=endflag)t=InsertBST(t,key);scanf(%d,&key);return t;中序遍歷算法void Inorder(Bstnode *t)if(t!=NULL)Inorder(t-lchild);Printf(%4dn,t-key);Inorder(t-rchild);

10、先遍歷左孩子,再遍歷父結(jié)點(diǎn),最后遍歷右孩子。由于是對一個(gè)二叉排序樹進(jìn)展中序遍歷,遍歷結(jié)果則是一個(gè)有序序列。刪除算法待刪除結(jié)點(diǎn)*p無左孩子,也無右孩子,則*p的父結(jié)點(diǎn)對應(yīng)的孩子指針置空;待刪除結(jié)點(diǎn)*p有左孩子,無右孩子,則*p的左孩子替代自己;待刪除結(jié)點(diǎn)*p無左孩子,有右孩子,則*p的右孩子替代自己;待刪除結(jié)點(diǎn)*p有左孩子,也有右孩子,本課程數(shù)據(jù)構(gòu)造與算法給出了兩種法: 方法一: 首先找到待刪結(jié)點(diǎn)*p的前驅(qū)結(jié)點(diǎn)*s,然后將*p的左子樹改為*p父結(jié)點(diǎn)的左子樹,而*p的右子樹改為*s的右子樹: f-lchild=p-lchild; s-rchild=p-rchild; free(p); 方法二: 首

11、先找到待刪結(jié)點(diǎn)*p的前驅(qū)結(jié)點(diǎn)*s,然后用結(jié)點(diǎn)*s的值替代結(jié)點(diǎn)*p的值,再將結(jié)點(diǎn)*s刪除,結(jié)點(diǎn)*s的原左子樹改為*s的雙親結(jié)點(diǎn)*q的右子樹: p-data=s-data;q-rchild=s-lchild;free(s);我采用的是第二種算法。7、考前須知:其中,*些函數(shù)順序一定不能顛倒。例如建立二叉排序樹函數(shù)一定是在插入算法之后。編寫完根本操作算法后,為最后主函數(shù)的輸出模塊作準(zhǔn)備,又分別寫了遞歸查找模塊、插入模塊、刪除模塊、顯示模塊。上機(jī)調(diào)試語法錯(cuò)誤及修改:在編寫程序時(shí),很容易出現(xiàn)分號漏寫和括號不匹配的現(xiàn)象,以及缺少返回值的問題。例如:在編寫非遞歸查找算法時(shí):Bstnode * searchB

12、ST (Bstnode *t,int *)Bstnode *p;int flag=0;p=t;while(p!=NULL)if(p-key=*)printf(找到了!);flag=1;return p;break;if(*key)p=p-lchild;elsep=p-rchild;if(flag=0)printf(找不到值為%d的結(jié)點(diǎn),*); return NULL;結(jié)果編譯時(shí)出現(xiàn)了警告warning : searchBST : not all control paths return a value然后我做了改動,改后程序如下:Bstnode *searchBST(Bstnode *t,in

13、t *)Bstnode *p;int flag=0;p=t;while(p!=NULL) if(p-key=*)printf(該結(jié)點(diǎn)值存在!);flag=1;break; if(*key)p=p-lchild;elsep=p-rchild;if(flag=0)printf(找不到值為%d的結(jié)點(diǎn)!,*);p=NULL;return p;將NULL值賦給指針p,再在程序結(jié)尾返回p,此時(shí),編譯結(jié)果就正確了!程序輸出調(diào)整:在遞歸查找算法(Bsearch)中針對查找結(jié)果如何,沒有用明確的輸出函數(shù)表示出來。于是我添加了一個(gè)遞歸查找模塊如下:search_Bitree(Bstnode *t)int s;Bs

14、tnode *p;printf(n請輸入要查找的結(jié)點(diǎn)的值:);scanf(%d,&s); if(s!=0)p=Bsearch(t,s); if(p=NULL) printf(該結(jié)點(diǎn)值不存在!n); else printf(找不到值為%d的結(jié)點(diǎn)!n,s);這樣主函數(shù)便可直接調(diào)用該函數(shù)來實(shí)現(xiàn)查找過程。時(shí)間和空間性能分析:由于二叉排序樹的中序遍歷序列為一個(gè)遞增的有序序列,這樣可以將二叉排序樹看作是一個(gè)有序表。其查找過程:假設(shè)查找成功,則是從根結(jié)點(diǎn)出發(fā)走了一條從根到*個(gè)結(jié)點(diǎn)的路徑;假設(shè)查找不成功,則是從根結(jié)點(diǎn)出發(fā)走了一條從根到*個(gè)葉子結(jié)點(diǎn)的路徑。和關(guān)鍵字比擬次數(shù)不超過二叉排序樹的深度。二叉排序樹的平均

15、查找長度與其形態(tài)有關(guān)。最壞情況是具有n個(gè)結(jié)點(diǎn)的單支樹,其平均查找長度與順序查找一樣,為n+1/2;即平均查找長度的數(shù)量級為On。在最好情況下,二叉排序樹形態(tài)均勻,它的平均查找長度與二分查找相似,大約是log2n,其平均查找長度的數(shù)量級為Olog2n。經(jīng)歷與體會:由于該設(shè)計(jì)問題是對數(shù)據(jù)構(gòu)造與算法課程中二叉樹章節(jié)的靈活應(yīng)用,所以課本給了我很大的幫助,結(jié)合所學(xué)知識以及對二叉排序樹的理解,來編寫該程序。測試結(jié)果及分析452453122890建立如圖a的二叉排序樹,輸入的數(shù)據(jù)依次為:45 24 53 12 28 90 00為輸入完畢符,屏幕圖1上顯示的是橫置的二叉樹452453122890 圖a 圖b圖

16、12、選擇方框中給定的工程輸入04中任意數(shù)。假設(shè)輸入錯(cuò)誤會有提示,可以重新輸入。圖2輸入1,則出現(xiàn)查找菜單。選擇查找方法。圖34、在查找菜單項(xiàng)選擇1,則進(jìn)展遞歸查找。圖45、同理,假設(shè)選擇2,則進(jìn)展非遞歸查找。查找的值存在與否都會有顯示。圖56、選2,則進(jìn)展插入操作。插入關(guān)鍵值為13的結(jié)點(diǎn)后,顯示如圖6,即插入13后的橫置的二叉排序樹圖c圖d。4524531228901345245312289013 圖c 圖d圖6選3,進(jìn)展刪除操作。刪除關(guān)鍵值為24的結(jié)點(diǎn)后,顯示如圖7,即刪除24后的橫置的二叉排序樹圖e圖f451353122890451353122890 圖e 圖f圖7選4則顯示詳細(xì)信息。如

17、圖8所示,按中序遍歷從小到大依次輸出,并顯示每個(gè)結(jié)點(diǎn)的孩子情況,最后打印出橫置的二叉排序樹。圖8選0則退出程序。圖9用戶使用說明用戶可以根據(jù)本程序運(yùn)行過程中出現(xiàn)的提示性語句來進(jìn)展操作。要注意括號中的提示,假設(shè)沒有按照提示輸入的話,程序可能將無法繼續(xù)進(jìn)展下去。例如開場輸入數(shù)據(jù)時(shí)直到輸入0時(shí)才算完畢輸入,從而進(jìn)展下一步操作。在遇到選項(xiàng)時(shí),選擇錯(cuò)誤會給你重新選擇的時(shí)機(jī)。提示:進(jìn)展一系列插入刪除等操作后,可以選擇顯示項(xiàng)來顯示最后的二叉排序樹狀態(tài) (二叉排序樹顯示的是中序遍歷后的序列) 。參考文獻(xiàn)(1)王昆侖.李紅.數(shù)據(jù)構(gòu)造與算法.:中國鐵道,2007.6(2)王昆侖.李紅.數(shù)據(jù)構(gòu)造與算法試驗(yàn)指導(dǎo),20

18、09(3)譚浩強(qiáng).c程序設(shè)計(jì).:清華大學(xué),2005.7(4)嚴(yán)蔚敏.數(shù)據(jù)構(gòu)造:語言版.:清華大學(xué),2002(5)耿國華.等.數(shù)據(jù)構(gòu)造:用c語言描述.:高等教育,2004八、附錄#include stdio.h#include malloc.h#include stdlib.h#define endflag 0/定義endflag為關(guān)鍵字輸入完畢的標(biāo)志/二叉排序樹的結(jié)點(diǎn)構(gòu)造typedef struct nodeint key;/關(guān)鍵字項(xiàng)struct node *lchild,*rchild;/左右孩子指針Bstnode;/二叉排序樹的查找算法之一遞歸Bstnode *Bsearch(Bstnod

19、e *t,int *)if(t=NULL)/二叉排序樹為空,查找失敗return NULL;elseif(t-key=*)/查找成功,返回當(dāng)前結(jié)點(diǎn)return t;if(*key)return(Bsearch(t-lchild,*);/進(jìn)入左子樹遞歸查找elsereturn(Bsearch(t-rchild,*);/進(jìn)入右子樹遞歸查找/遞歸查找函數(shù)顯示查找結(jié)果search_Bitree(Bstnode *t)int s;/定義待查結(jié)點(diǎn)的關(guān)鍵值Bstnode *p;/定義待查的結(jié)點(diǎn)printf(n請輸入要查找的結(jié)點(diǎn)的值:);scanf(%d,&s); if(s!=0)p=Bsearch(t,s)

20、;/遞歸查找 if(p!=NULL) printf(該結(jié)點(diǎn)值存在!n); else printf(找不到值為%d的結(jié)點(diǎn)!n,s);/二叉排序樹的查找算法之二非遞歸Bstnode *searchBST(Bstnode *t,int *)Bstnode *p;int flag=0;p=t;/定義*p結(jié)點(diǎn)用于逐層查找,叢根結(jié)點(diǎn)開場查找while(p!=NULL)/二叉排序樹不為空 if(p-key=*)/查找成功printf(該結(jié)點(diǎn)值存在!);flag=1;break;/查找不成功,到下一層繼續(xù)查找 if(*key)p=p-lchild;/查找左子樹elsep=p-rchild;/查找右子樹if(f

21、lag=0)printf(找不到值為%d的結(jié)點(diǎn)!,*);p=NULL;return p;/二叉排序樹的結(jié)點(diǎn)插入算法Bstnode *InsertBST(Bstnode *t,int *)/ 插入關(guān)鍵值為*的元素Bstnode *s,*p,*f;/*s為待插結(jié)點(diǎn),*p為逐層查找結(jié)點(diǎn),*f為待插結(jié)點(diǎn)的父結(jié)點(diǎn)p=t;while(p!=NULL)f=p;/查找過程中,f指向*p的父結(jié)點(diǎn)if(*=p-key)/假設(shè)二叉樹中已有關(guān)鍵值為*的元素,無需插入return t;if(*key)p=p-lchild;elsep=p-rchild;s=(Bstnode *)malloc(sizeof(Bstnode

22、);s-key=*;s-lchild=NULL;s-rchild=NULL;if(t=NULL)/原樹為空,新結(jié)點(diǎn)作為二叉排序樹的根return s;if(*key)f-lchild=s;/新結(jié)點(diǎn)作為*f左孩子else f-rchild=s;/新結(jié)點(diǎn)作為*f右孩子return t;/中序遍歷遞歸法void Inorder(Bstnode *t)if(t!=NULL)/假設(shè)二叉樹不空Inorder(t-lchild);/遍歷左孩子 printf(%4d,t-key);Inorder(t-rchild);/遍歷右孩子 /二叉排序樹的結(jié)點(diǎn)刪除算法Bstnode *DeleteBST(Bstnode

23、*t,int k)/刪除關(guān)鍵值為k的元素Bstnode *p,*f,*s,*q;/*p為待刪結(jié)點(diǎn),*f為*p父結(jié)點(diǎn),*s為*p的中序前驅(qū)結(jié)點(diǎn),*q為*s的父結(jié)點(diǎn)p=t;f=NULL;/從根結(jié)點(diǎn)開場查找,并將*f置空/查找關(guān)鍵值為k的待刪結(jié)點(diǎn)*pwhile(p!=NULL)if(p-key=k) break;/假設(shè)找到,則退出循環(huán)f=p;/未找到時(shí)將*f替代*p,*p則下移進(jìn)入左右子樹繼續(xù)查找if(p-keyk)p=p-lchild;elsep=p-rchild;if(p=NULL) return t;/假設(shè)找不到,則返回原二叉排序樹的根指針/查找成功后,對*p的刪除過程if(p-lchild=

24、NULL|p-rchild=NULL)/假設(shè)*p無左子樹或無右子樹if(f=NULL)/假設(shè)*p是原二叉排序樹的根if(p-lchild=NULL) t=p-rchild;/無左孩子,右孩子做根 else t=p-lchild;/無右孩子,左孩子做根else if(p-lchild=NULL)/假設(shè)*p無左子樹if(f-lchild=p) f-lchild=p-rchild;/p是*f的左孩子else f-rchild=p-lchild;/p是*f的右孩子 else /假設(shè)*p無右子樹 if(f-lchild=p) f-lchild=p-lchild;/p是*f的左孩子else f-rchil

25、d=p-lchild;/p是*f的右孩子free(p);else/假設(shè)*p有左右子樹q=p;s=p-lchild;while(s-rchild)/在*p的左子樹中查找最右下結(jié)點(diǎn)(即其中序前驅(qū)結(jié)點(diǎn))q=s;s=s-rchild;if(q=p) q-lchild=s-lchild;else q-rchild=s-lchild;p-key=s-key;/將*s的值賦給*pfree(s);return t;/插入函數(shù)顯示插入結(jié)果Bstnode *insert_Bitree(Bstnode *t)int s;/定義待插結(jié)點(diǎn)的關(guān)鍵值Bstnode *p;/定義待插的結(jié)點(diǎn) printf(n); printf

26、(請輸入要插入的結(jié)點(diǎn)的值:); scanf(%d,&s); if(s!=0) p=Bsearch(t,s); if(p=NULL) t=InsertBST(t,s);printf(插入結(jié)點(diǎn)中序遍歷后的二叉排序樹:n); Inorder(t); printf(n二叉排序樹的根為:%dn,t-key); else printf(該結(jié)點(diǎn)值存在,不插入!n); return t; /刪除函數(shù)顯示刪除結(jié)果Bstnode *delete_Bitree(Bstnode *t)int s;/定義待刪結(jié)點(diǎn)的關(guān)鍵值Bstnode *p;/定義待刪的結(jié)點(diǎn)printf(n請輸入要?jiǎng)h除的結(jié)點(diǎn)的值:);scanf(%d,

27、&s);if(s!=0)p=Bsearch(t,s);if(p=NULL)printf(找不到值為%d的結(jié)點(diǎn)!,s); else t=DeleteBST(t,s); printf(刪除結(jié)點(diǎn)后中序遍歷的二叉排序樹:n); Inorder(t);printf(n二叉排序樹的根為:%dn,t-key); return t;/設(shè)置二叉排序樹的初值Bstnode *CreateBST()Bstnode *t;int s;t=NULL;/設(shè)置二叉排序樹的初態(tài)為空 scanf(%d,&s); while(s!=endflag)/輸?shù)酵戤叿麨橹箃=InsertBST(t,s); scanf(%d,&s); r

28、eturn t; /顯示函數(shù)void print_Bitree(Bstnode *t) if(t!=NULL)/中序遍歷二叉排序樹,并顯示遍歷結(jié)果 print_Bitree(t-lchild); printf(遍歷結(jié)點(diǎn)%d,t-key); if(t-lchild!=NULL) printf(該結(jié)點(diǎn)的左孩子為%d,t-lchild-key); else printf(該結(jié)點(diǎn)的左孩子為空); if(t-rchild!=NULL) printf( 該結(jié)點(diǎn)的右孩子為%d),t-rchild-key); else printf( 該結(jié)點(diǎn)的右孩子為空); printf(nn); print_Bitree(

29、t-rchild); /主菜單int mainmenu()int choice;int flag=1;/標(biāo)記量printf(nnn);printf(ttt*對二叉排序樹進(jìn)展操作*n);printf(tttn); printf(tttn);printf(ttt1.二叉排序樹-查找n); printf(ttt2.二叉排序樹-插入n); printf(ttt3.二叉排序樹-刪除n); printf(ttt4.二叉排序樹-顯示n); printf(ttt0.退出該程序n);printf(tttn);printf(tttn); printf(ttt*n); printf(nnn); doif(flag=0)printf(!您的輸入有誤,請重新輸入n); printf(請選擇您要進(jìn)展的工程:); scanf(%d,&choice); flag=0;while(choice4);return choice;/查找方法菜單int searchm

溫馨提示

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

評論

0/150

提交評論