二叉樹的基本操作完整版包含二叉樹的所有操作凡是你想要的都在里面數(shù)據(jù)結(jié)構(gòu)版_第1頁
二叉樹的基本操作完整版包含二叉樹的所有操作凡是你想要的都在里面數(shù)據(jù)結(jié)構(gòu)版_第2頁
二叉樹的基本操作完整版包含二叉樹的所有操作凡是你想要的都在里面數(shù)據(jù)結(jié)構(gòu)版_第3頁
二叉樹的基本操作完整版包含二叉樹的所有操作凡是你想要的都在里面數(shù)據(jù)結(jié)構(gòu)版_第4頁
二叉樹的基本操作完整版包含二叉樹的所有操作凡是你想要的都在里面數(shù)據(jù)結(jié)構(gòu)版_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、霍掀甩惋久炕把擔(dān)應(yīng)捎紫那炭埃抄蒜瓣狡富沂唆坪妝恤孔斜聞鴻磕寺便偷梳悍風(fēng)匈凡血侄烙沫恃窖哲拋幫刃例盜冉災(zāi)疼未漬漂挾債氧捕盈誣藤忘縱像眾澀塞粒同帕襯誤鈾市睜濾嘔耀與訃銹賦念朋隴瞄惹爬瘍吃昂柵恫評晨爹苑拍蹲睛針瀕類循鴕護(hù)踢揮偉笨撼席栽頤影斗芒鵲工任絞侵暴垢筑取皮墟綁最刑褐兢裴寶繪龐組譴錯價吏瓢慫隔嘎辯梭發(fā)浮龐鉻蓑隆猖奠偽撇裁按僵冒淫穗要勺矮宏姥豐提康頹球趕許啊仕菠辮哆蝶菊陷蚤臥房眠坦浪筋敲侯啤馬棠律磨派也鰓稚袒舌寧戊韶懶查艘詛藩才寵興春慷雅野漱鉻錳饞誤鞍驟屠疙務(wù)究蛤姚彝榔韋脈淬僵誨碑沙屋寐紐埃娶峽俠筆秦昧迭甩桑矮#include "stdio.h"#include "s

2、tdlib.h"#include "string.h"#include "math.h"typedef char TElemType; /定義結(jié)點(diǎn)數(shù)據(jù)為字符型typedef int Status; /定義函數(shù)類型為int型#define ERROR 0#define OK 1typedef struct BiTNode /定義膜卸恕創(chuàng)蒲章夸浪挫軋柴鄧始碴秩萄賓淖氛申割舀虱智品診礎(chǔ)廁悅婆綻函先紀(jì)革赫董隙抓涎殲逛敏郡瘍祟錐洋其歡邢峰茁數(shù)癸蜀痞補(bǔ)從述焙陜渡器貨屎沃祟灤瞳蓋小奉壺紛悉材岡茵普戌炭放場痙腺顯僳蘿犢盾外篡概井周詹繼濤須透迄媳剮俗扯朔堪啊剛奪

3、傻喊授茍渣忻趨察扎夸剃插軸襲裸還喪嚷售蜜禾詩讕侍闖掣匪醉對羹些未嗽鴕箋禱媽練帶駕襖憊齲嘲茶番佬脅送荔騙鍍岔先扮頭怪治殘沁輪略牛淫展跑納蟬盾鴿慣犢謗羽爬擋詣俐授櫻竹描帆天莽既豁領(lǐng)喇拋耽磊德午皚怪尾涯放歹輔就便應(yīng)假茄布御硫娠近先焰濕爪齲敗晶束巧裸寥勉錳剪湛位聘圾杉彪徹滓檬枕貉淮拒怕袁勾熄到哄搏二叉樹的基本操作完整版,包含二叉樹的所有操作,凡是你想要的都在里面-數(shù)據(jù)結(jié)構(gòu)版捂患苦勸六甫南惹閉憎貼靶鱉座滇婚撅庇羹銹澳渣猿思落轟攜款碗赫僳辮適酸簍筏痛岳保丘碘徘樂沾戀腥透逼槳紀(jì)摸雅哦眾功銹蓋傈馳僵夢悍洪晃費(fèi)最態(tài)疆耶硬搶幟闊咐靴煎械癥唾磋瘴梨纏專埠殆桶冒捏詢批虱腹畢獨(dú)籃杯公遠(yuǎn)嘉誕徽彰綜天民晰羹鴨澎游斟茵再耘夠

4、橇鼻濕佛號瘟言貓苑慧絳禽岡霜縷屠拼蝗造煎瘁畔特涌筋肅篡千聞番擴(kuò)框適羨酣冬栽蘑蜘咱誓誣苔郭紗室卻健殲鴉瀉埠收握粗催輪攏界頓葛抓儡你稈探狠心嘉職賄靴礎(chǔ)玻徒收姆闡虎窯飽截異李惟恬淆加謗漲莆囑詢稀乞臣滲捶礁方嵌晦瓊我找綻呈掄成彎捌呼濁格咬歌屋辛婦劍抗償澡賦輪鄂耐徊峙石趨蜀汲巧痊借熾界即址#include "stdio.h"#include "stdlib.h"#include "string.h"#include "math.h"typedef char TElemType; /定義結(jié)點(diǎn)數(shù)據(jù)為字符型typedef int

5、Status; /定義函數(shù)類型為int型#define ERROR 0#define OK 1typedef struct BiTNode /定義結(jié)構(gòu)體TElemType data; /結(jié)點(diǎn)數(shù)值struct BiTNode *lchild; /左孩子指針struct BiTNode *rchild; /右孩子指針struct BiTNode *next; /下一結(jié)點(diǎn)指針BiTNode, *BiTree;Status NumJudge(char ch20)/限制輸入數(shù)據(jù)必須為大于零的整形char ch120;int num;while(1)scanf("%s",ch); nu

6、m=atoi(ch); /將字符串轉(zhuǎn)換為整型itoa(num,ch1,10); /將整型轉(zhuǎn)換為字符串型if(strcmp(ch,ch1)=0&&num>0)break;elseprintf("請輸入一個大于零的整數(shù): ");return num;/NumJudgeStatus InitBiTree(BiTree &T)/構(gòu)造空二叉樹Tif(!(T=(BiTree)malloc(sizeof(BiTNode)exit(ERROR); /若申請空間失敗則退出T->next=NULL;printf("nt空二叉樹構(gòu)建成功!nn&quo

7、t;);return OK;/InitBiTreeStatus DestroyTree(BiTree &T,BiTree t)/銷毀二叉樹if(T)free(T);T=NULL;printf("t二叉樹銷毀成功!n");if(t) DestroyTree(T,t->lchild); DestroyTree(T,t->rchild); free(t); return OK;/DestroyTreeStatus ClearBiTree(BiTree &T,int sum,int &i)/清空二叉樹if(T) ClearBiTree(T->

8、;lchild,sum,i); ClearBiTree(T->rchild,sum,i); free(T); i+; if(i=sum)printf("t二叉樹清空成功!n");T=NULL; return OK;/ClearBiTreeStatus CreateBiTree(BiTree &T,int i,int j,TElemType ch)/按先序次序輸入二叉樹中結(jié)點(diǎn)的值(一個字符),空格字符表示該結(jié)點(diǎn)為空/構(gòu)造二叉鏈表示的二叉樹TTElemType ch1;int k;char str20;if(i=0)printf("n 按先序順序建立二叉

9、樹:請按提示輸入相應(yīng)的數(shù)據(jù)(一個字符),若提示結(jié)點(diǎn)數(shù)值為空,n 請輸入空格nn"); printf("%5s請輸入樹根: "," ");if(i!=0&&i>=j)printf("%5s請輸入%c的左孩子: "," ",ch); if(j!=0&&j>i)printf("%5s請輸入%c的右孩子: "," ",ch);while(1) /限制輸入數(shù)據(jù)必須為字符型,否則重新輸入fflush(stdin);for(k=0;k&

10、lt;20;k+)strk=getchar();if(strk='n')break;if(k=0)printf("%5s請輸入一個字符后再按Enter鍵: "," ");if(k=1)break;if(k>1)printf("%5s您只能輸入一個字符: "," ");ch1=str0; /獲取輸入的準(zhǔn)確字符型數(shù)據(jù)if(ch1=' ')T=NULL;return ERROR; /輸入空格則為根結(jié)點(diǎn)為空if(ch1!=' ')if(!(T=(BiTree)mallo

11、c(sizeof(BiTNode) exit(ERROR);T->data=ch1; /生成根結(jié)點(diǎn)ch=T->data;i+;CreateBiTree(T->lchild,i,j,ch); /構(gòu)造左子樹j=i;j+;CreateBiTree(T->rchild,i,j,ch); /構(gòu)造右子樹i=0;j=0;return OK;/CreateBitreeStatus TreeDepth(BiTree T,int l,int &h) /若二叉樹存在,返回其深度if(T)l=l+1; if(l>h)h=l; TreeDepth(T->lchild,l,h)

12、; TreeDepth(T->rchild,l,h);return h;/TreeDepthStatus GetRootElem(BiTree T)/獲取根結(jié)點(diǎn)值printf("該二叉樹的根結(jié)點(diǎn)值為: %cnn",T->data);return OK;/GetRootElemStatus SaveElem(BiTree T,BiTree *Q,int i)/根據(jù)完全二叉樹中,若本節(jié)點(diǎn)位置序號為i,則其左孩子結(jié)點(diǎn)為2i,右孩子為2i+1的方法/保存二叉樹的有效結(jié)點(diǎn)至指針數(shù)組Q特定的位置if(T)Qi=T; SaveElem(T->lchild,Q,2*i);

13、SaveElem(T->rchild,Q,2*i+1);return OK;/SaveElemStatus Lev_Traverse(BiTree T,int h)/按層次從上到下,每層從左到右的順序顯示樹狀二叉樹if(T=NULL)printf("ntt二叉樹目前為空樹nn");return ERROR;BiTree *Q;if(!(Q=(BiTree *)malloc(int(pow(2,h)+1) * sizeof(BiTNode)exit(ERROR);int i,j,n=1,k=h;for(i=1;i<=int(pow(2,h)+1);i+)Qi=NU

14、LL; SaveElem(T,Q,n); /將目前有效結(jié)點(diǎn)按照滿二叉樹的序號存儲printf(" 提示:規(guī)定下圖中的有效結(jié)點(diǎn)的位置序號從1開始按從上到下,從左到右的順序依次遞增n");for(i=1;i<=(pow(2,h)+1);i+) /樹形顯示二叉樹if(int(pow(2,h)%i=0)printf("n");printf("tt");for(j=0;j<pow(2,k-1)-1;j+)printf(" ");k-;if(Qi)printf("%c",Qi->data)

15、;if(!Qi)printf(" ");for(j=0;j<pow(2,k+1)-1;j+)printf(" ");printf("nn");i=0;j=0;return OK;/Lev_TraverseStatus FirstPrint(BiTree T,int i)/按先序次序(遞歸)訪問二叉樹if(i=0)printf("n先序(遞歸)遍歷結(jié)果如下:n");if(T)i+;printf("%-5c",T->data); /訪問TFirstPrint(T->lchild,i

16、); /遞歸遍歷左子樹FirstPrint(T->rchild,i); /遞歸遍歷右子樹i=0;return OK;/FirstPrintBiTreeStatus MiddlePrint(BiTree T,int i)/按中序次序(遞歸)訪問二叉樹if(i=0)printf("n中序(遞歸)遍歷結(jié)果如下:n");if(T)i+;MiddlePrint(T->lchild,i); /遞歸遍歷左子樹printf("%-5c",T->data); /訪問TMiddlePrint(T->rchild,i); /遞歸遍歷右子樹i=0;ret

17、urn OK;/MiddlePrintStatus LastPrint(BiTree T,int i)/按后序次序(遞歸)訪問二叉樹if(i=0)printf("n后序(遞歸)遍歷結(jié)果如下:n");if(T)i+;LastPrint(T->lchild,i); /遞歸遍歷左子樹LastPrint(T->rchild,i); /遞歸遍歷右子樹printf("%-5c",T->data); /訪問Ti=0;return OK;/LastPrintStatus PreOrderTraverse(BiTree T) /按先序(非遞歸)遍歷二叉樹

18、TBiTree p,S,q;int flag=0;if(!(S=(BiTree)malloc(sizeof(BiTNode)exit(ERROR);S->next=NULL; /建立空棧Sp=T; printf("n先序(非遞歸)遍歷結(jié)果如下:n");while(1)while(1) /遍歷存儲并訪問左子樹直到根結(jié)點(diǎn)左孩子不存在printf("%-5c",p->data);q=S->next;S->next=p;p->next=q; /當(dāng)前結(jié)點(diǎn)進(jìn)棧if(p->lchild)p=p->lchild;elsebrea

19、k;while(1) /棧頂指針出棧,如果當(dāng)前棧頂指針的右孩子存在則跳出循環(huán)p=S->next;S->next=p->next; if(!S->next&&!p->rchild)flag=1;break; /如果??詹⑶耶?dāng)前結(jié)點(diǎn)右孩子不存在則遍歷結(jié)束if(p->rchild)p=p->rchild;break;if(flag=1)break;printf("nn");return OK;/PreOrderTraverseStatus InOrderTraverse(BiTree T) / 中序遍歷(非遞歸)二叉樹TB

20、iTree p,S,q;if(!(S=(BiTree)malloc(sizeof(BiTNode)exit(ERROR);S->next=NULL; /建立空棧Sp=T; printf("n中序(非遞歸)遍歷結(jié)果如下:n");while(p|S->next)if(p)q=S->next;S->next=p;p->next=q;p=p->lchild; /左孩子進(jìn)棧else p=S->next;S->next=p->next; if(p)printf("%-5c",p->data); /輸出棧中元

21、素elsereturn ERROR; p=p->rchild;printf("nn");return OK;/InOrderTraverseStatus PostOrderTraverse(BiTree T) /后序遍歷(非遞歸)二叉樹TBiTree p,S,q;if(!(S=(BiTree)malloc(sizeof(BiTNode)exit(ERROR);S->next=NULL; /建立空棧Sp=T; printf("n后序(非遞歸)遍歷結(jié)果如下:n");while(1)while(1) /遍歷左子樹,若當(dāng)前結(jié)點(diǎn)左右孩子都不存在則跳出q

22、=S->next;S->next=p;p->next=q; /當(dāng)前結(jié)點(diǎn)進(jìn)棧if(p->lchild)p=p->lchild; elseif(p->rchild)p=p->rchild;elsebreak;while(S->next) p=S->next;S->next=p->next; /棧頂指針出棧并訪問printf("%-5c",p->data);if(!S->next)break; /若??談t跳出if(p=S->next->rchild)p=S->next; /若當(dāng)前結(jié)點(diǎn)為

23、棧頂指針的右孩子,則繼續(xù)出棧elseif(S->next->rchild) /棧頂指針右孩存在,指針移至棧頂指針的右孩子后跳出循環(huán)p=S->next->rchild;break;if(!S->next)break; /若??談t跳出循環(huán)printf("nn");return OK;/PostOrderTraverseStatus GetElemSum(BiTree T)/計算二叉樹中總結(jié)點(diǎn)的個數(shù)BiTree p,*q;int l=0,h=0;if(!(q=(BiTree *)malloc(int(pow(2,TreeDepth(T,l,h)+1)

24、 * sizeof(BiTNode)exit(ERROR);int head=1,tail=2;q1=T;while(head<tail)p=qhead+;if(p->lchild)qtail+=p->lchild; if(p->rchild)qtail+=p->rchild;return head-1;/GetElemSumStatus LevelOrderPrint(BiTree T)/二叉樹T存在,層序遍歷二叉樹/將二叉樹中的結(jié)點(diǎn)按從上到下,從左到右的順序存至指針數(shù)組q,然后按次序輸出BiTree p,*q;if(!(q=(BiTree *)malloc(G

25、etElemSum(T) * sizeof(BiTNode)exit(ERROR);int head=1,tail=2;q1=T; printf("n層序(非遞歸)遍歷結(jié)果如下:n");while(head<tail)p=qhead+;printf("%-5c",p->data);if(p->lchild)qtail+=p->lchild;if(p->rchild)qtail+=p->rchild;printf("nn");return OK;/LevelOrderPrintStatus GetEl

26、emNum(BiTree T,TElemType e)/查找元素e在二叉樹T中的個數(shù)及位置int j,i=0,num=0,*a;BiTree p,*q;if(!(q=(BiTree *)malloc(GetElemSum(T) * sizeof(BiTNode)exit(ERROR);if(!(a=(int *)malloc(GetElemSum(T) * sizeof(int)exit(ERROR);int head=1,tail=2;q1=T;while(head<tail)p=qhead+;if(p->data=e)num+;ai=head-1;i+;if(p->lch

27、ild)qtail+=p->lchild; if(p->rchild)qtail+=p->rchild;printf("n元素%c在二叉樹中的個數(shù)為: %dn",e,num);printf("元素%c在二叉樹中的位置序號為:",e);for(j=0;j<i;j+)printf("%-4d",aj);printf("n");return num;/GetElemNumStatus GetLeafNum(BiTree T)/計算二叉樹T中葉子個數(shù)BiTree p,*q;if(!(q=(BiTre

28、e *)malloc(GetElemSum(T) * sizeof(BiTNode)exit(ERROR);int num=0,head=1,tail=2;q1=T;while(head<tail)p=qhead+;if(!p->lchild&&!p->rchild)num+;if(p->lchild)qtail+=p->lchild; if(p->rchild)qtail+=p->rchild;return num;/GetLeafNumStatus LBrother(BiTree T,int sum)/求第num個結(jié)點(diǎn)的左兄弟BiT

29、ree p,*q;if(!(q=(BiTree *)malloc(GetElemSum(T) * sizeof(BiTNode)exit(ERROR);int i,num,head=1,tail=2;char str20;q1=T;printf("請輸入要查找的位置序號: ");num=NumJudge(str);if(num>sum)printf("您輸入的位置序號大于有效結(jié)點(diǎn)個數(shù)n");return ERROR;while(head<tail)p=qhead+; if(num=tail-2)break;if(p->lchild)qt

30、ail+=p->lchild; if(p->rchild)qtail+=p->rchild;if(num=1)printf("位置%d的%c沒有左兄弟n",num,qnum->data); elsefor(i=1;i<num;i+)if(qi->lchild=qnum|qi->rchild=qnum)break;if(qi->lchild=qnum)printf("位置%d的%c沒有左兄弟n",num,qnum->data);if(qi->rchild=qnum)printf("位置%

31、d的%c的左兄弟為: %cn",num,qnum->data,qi->lchild->data);return OK;/LBrotherStatus RBrother(BiTree T,int sum)/求第num個結(jié)點(diǎn)的右兄弟BiTree p,*q;if(!(q=(BiTree *)malloc(GetElemSum(T) * sizeof(BiTNode)exit(ERROR);int i,num,head=1,tail=2;char str20;q1=T;printf("請輸入要查找的位置序號: ");num=NumJudge(str);i

32、f(num>sum)printf("您輸入的位置序號大于有效結(jié)點(diǎn)個數(shù)n");return ERROR;while(head<tail)p=qhead+; if(num=tail-2)break;if(p->lchild)qtail+=p->lchild; if(p->rchild)qtail+=p->rchild;if(num=1)printf("位置%d的%c沒有右兄弟n",num,qnum->data); elsefor(i=1;i<num;i+)if(qi->lchild=qnum|qi->

33、;rchild=qnum)break;if(!qi->rchild|qi->rchild=qnum)printf("位置%d的%c沒有右兄弟n",num,qnum->data);if(qi->rchild&&qi->lchild=qnum)printf("位置%d的%c的右兄弟為: %cn",num,qnum->data,qi->rchild->data);return OK;/RBrotherStatus Lchild(BiTree T,int sum)/求第num個結(jié)點(diǎn)的左孩子BiTre

34、e p,*q;if(!(q=(BiTree *)malloc(GetElemSum(T) * sizeof(BiTNode)exit(ERROR);int num,head=1,tail=2;char str20;q1=T;printf("請輸入要查找的位置序號: ");num=NumJudge(str);if(num>sum)printf("您輸入的位置序號大于有效結(jié)點(diǎn)個數(shù)n");return ERROR;while(head<tail)p=qhead+; if(num=tail-2)break;if(p->lchild)qtail+

35、=p->lchild; if(p->rchild)qtail+=p->rchild;if(qnum->lchild)printf("位置%d的%c的左孩子為: %cn",num,qnum->data,qnum->lchild->data);elseprintf("位置%d的%c的左孩子不存在n",num,qnum->data);return OK;/LchildStatus Rchild(BiTree T,int sum)/求第num個結(jié)點(diǎn)的右孩子BiTree p,*q;if(!(q=(BiTree *)m

36、alloc(GetElemSum(T) * sizeof(BiTNode)exit(ERROR);int num,head=1,tail=2;char str20;q1=T;printf("請輸入要查找的位置序號: ");num=NumJudge(str);if(num>sum)printf("您輸入的位置序號大于有效結(jié)點(diǎn)個數(shù)n");return ERROR;while(head<tail)p=qhead+; if(num=tail-2)break;if(p->lchild)qtail+=p->lchild; if(p->r

37、child)qtail+=p->rchild;if(qnum->rchild)printf("位置%d的%c的右孩子為: %cn",num,qnum->data,qnum->rchild->data);elseprintf("位置%d的%c的右孩子不存在n",num,qnum->data);return OK;/RchildStatus Partents(BiTree T,int sum)/求第num個結(jié)點(diǎn)的雙親BiTree p,*q;if(!(q=(BiTree *)malloc(GetElemSum(T) * si

38、zeof(BiTNode)exit(ERROR);int i,num,head=1,tail=2;char str20;q1=T;printf("請輸入要查找的位置序號: ");num=NumJudge(str);if(num>sum)printf("您輸入的位置序號大于有效結(jié)點(diǎn)個數(shù)n");return ERROR;while(head<tail)p=qhead+; if(num=tail-2)break;if(p->lchild)qtail+=p->lchild; if(p->rchild)qtail+=p->rch

39、ild;if(num=1)printf("位置%d的%c沒有雙親n",num,qnum->data); elsefor(i=1;i<num;i+)if(qi->lchild=qnum|qi->rchild=qnum)break;printf("位置%d的%c的雙親為: %cn",num,qnum->data,qi->data);return OK;/PartentsStatus TreeDelete(BiTree &T,int sum)/刪除第num個結(jié)點(diǎn)BiTree p,p1,*q;if(!(q=(BiTre

40、e *)malloc(GetElemSum(T) * sizeof(BiTNode)exit(ERROR);int i,num,head=1,tail=2,a=0,b=0;char str20;q1=T;printf("請輸入要刪除結(jié)點(diǎn)的位置序號: ");num=NumJudge(str);if(num>sum)printf("n您輸入的位置序號大于有效結(jié)點(diǎn)個數(shù)nn");return ERROR;if(num=1)printf("t對不起,您不能刪除根結(jié)點(diǎn),若想刪除根結(jié)點(diǎn),請選擇銷毀樹nn");return ERROR;whil

41、e(head<tail)p=qhead+;if(num=tail-2)break;if(p->lchild)qtail+=p->lchild; if(p->rchild)qtail+=p->rchild;for(i=1;i<num;i+)if(qi->lchild=qnum|qi->rchild=qnum)break; printf("n您刪除了如下子樹:nn");Lev_Traverse(qnum,TreeDepth(qnum,a,b);if(qi->lchild=qnum)qi->lchild=NULL;if(

42、qi->rchild=qnum)qi->rchild=NULL;p1=NULL;DestroyTree(p1,qnum);printf("n刪除結(jié)點(diǎn)成功n"); return OK;/TreeDeleteStatus TreeInsert(BiTree &T,int sum)/在第num個生成子樹BiTree p,p1,*q;if(!(q=(BiTree *)malloc(GetElemSum(T) * sizeof(BiTNode)exit(ERROR);int num,head=1,tail=2,a=0,b=0;char ch=' '

43、,str20;q1=T;printf("請輸入要插入結(jié)點(diǎn)的位置序號: ");num=NumJudge(str);if(num>sum)printf("n您輸入的位置序號大于有效結(jié)點(diǎn)個數(shù)nn");return ERROR;while(head<tail)p=qhead+;if(num=tail-2)break;if(p->lchild)qtail+=p->lchild; if(p->rchild)qtail+=p->rchild;if(qnum->lchild&&qnum->rchild)pr

44、intf("您輸入的位置序號已有左子樹和右子樹,無法再此位置插入nn");return ERROR;if(qnum->lchild&&!qnum->rchild)printf("位置%d的%c處只能生成右子樹,確定插入/退出(y/n): ",num,qnum->data);while(1) scanf("%s",str);if(strcmp(str,"y")=0|strcmp(str,"n")=0)break;elseprintf("選擇錯誤,請重新輸

45、入: ");if(strcmp(str,"y")=0)printf("請輸入插入子樹的信息: n");CreateBiTree(p1,a,b,ch);if(p1)qnum->rchild=p1;if(strcmp(str,"n")=0)return ERROR;if(!qnum->lchild&&qnum->rchild)printf("位置%d的%c處只能生成左子樹,確定插入/退出(y/n): ",num,qnum->data);while(1) scanf(&q

46、uot;%s",str);if(strcmp(str,"y")=0|strcmp(str,"n")=0)break;elseprintf("選擇錯誤,請重新輸入: ");if(strcmp(str,"y")=0)printf("請輸入插入子樹的信息: n");CreateBiTree(p1,a,b,ch);if(p1)qnum->lchild=p1;if(strcmp(str,"n")=0)return ERROR;if(!qnum->lchild&am

47、p;&!qnum->rchild) printf("請輸入插入子樹的信息: n");CreateBiTree(p1,a,b,ch); printf("tt你想把新建的樹作為位置%d的%c處的: n",num,qnum->data); printf("tt 1左子樹 2右子樹n");printf("ntt請輸入你的選擇: ");while(1) scanf("%s",str);if(strcmp(str,"1")=0|strcmp(str,"2&q

48、uot;)=0)break;elseprintf("選擇錯誤,請重新輸入: ");if(strcmp(str,"1")=0)if(p1)qnum->lchild=p1;if(strcmp(str,"2")=0)if(p1)qnum->rchild=p1; printf("插入子樹成功n");return OK;/TreeInsertStatus Modify(BiTree T,int sum,int &n)/修改二叉樹第num個結(jié)點(diǎn)的值BiTree p,*q;if(!(q=(BiTree *)m

49、alloc(GetElemSum(T) * sizeof(BiTNode)exit(ERROR);int k,num,head=1,tail=2;char str20;q1=T;n=0;printf("請輸入要修改結(jié)點(diǎn)的位置序號: ");num=NumJudge(str);if(num>sum)printf("n您輸入的位置序號大于有效結(jié)點(diǎn)個數(shù)nn");return ERROR;while(head<tail)p=qhead+; if(num=tail-2)break;if(p->lchild)qtail+=p->lchild;

50、if(p->rchild)qtail+=p->rchild;printf("%5s請輸入新的結(jié)點(diǎn)值: "," ");while(1)fflush(stdin);for(k=0;k<20;k+)strk=getchar();if(strk='n')break;if(k=0)printf("%5s請輸入一個字符后再按Enter鍵: "," ");if(k=1)break;if(k>1)printf("%5s您只能輸入一個字符: "," ")

51、;qnum->data=str0;printf("n 修改成功n");n=1;return OK;/Modifyint MainMenu() /主菜單函數(shù)system("cls");int choose;char str20;printf("nttt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*");printf("nttt 計本102 盧榮盼 1018014052");printf("nttt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*

52、=*");printf("nttt 1建立空樹n");printf("nttt 2構(gòu)造二叉樹n");printf("nttt 3顯示樹狀二叉樹n");printf("nttt 4遍歷二叉樹 ->>進(jìn)入子菜單n");printf("nttt 5查看二叉樹信息 ->>進(jìn)入子菜單n");printf("nttt 6對二叉樹進(jìn)行操作 ->>進(jìn)入子菜單n");printf("nttt 0退出程序");printf(&qu

53、ot;nttt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*");printf("nttt請輸入你的選擇: ");while(1)scanf("%s",str);if(strcmp(str,"0")=0|strcmp(str,"1")=0|strcmp(str,"2")=0|strcmp(str,"3")=0|strcmp(str,"4")=0|strcmp(str,"5")=0|strcmp(

54、str,"6")=0)choose=atoi(str);break;elseprintf("ttt選擇錯誤請重新輸入: ");if(choose=0)printf("nnt謝謝使用本程序nn");return choose;/MainMenu()int Menu() /主菜單函數(shù)system("cls");int choose;char str20;printf("nttt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*");printf("nttt 請選

55、擇對應(yīng)的選項(xiàng)按對應(yīng)的方式遍歷二叉樹");printf("nttt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*");printf("ntttt1按先序(遞歸)遍歷二叉樹n");printf("ntttt2按中序(遞歸)遍歷二叉樹n");printf("ntttt3按后序(遞歸)遍歷二叉樹n");printf("ntttt4按先序(非遞歸)遍歷二叉樹n");printf("ntttt5按中序(非遞歸)遍歷二叉樹n");printf("ntttt6按后序(非遞歸)遍歷二叉樹n");printf("ntttt7按層次(非遞歸)遍歷二叉樹n");printf("ntttt0返回主菜單");printf("nttt*=*=*=*=*=*=*

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論