二叉樹的基本操作完整版,包含二叉樹的所有操作,凡是你想要的都在里面--數(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頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、#include "stdio.h"#include "stdlib.h"#include "string.h"#include "math.h"typedef char TElemType; /定義結(jié)點數(shù)據(jù)為字符型typedef int Status; /定義函數(shù)類型為int型#define ERROR 0#define OK 1typedef struct BiTNode /定義結(jié)構(gòu)體TElemType data; /結(jié)點數(shù)值struct BiTNode *lchild; /左孩子指針struct BiTNod

2、e *rchild; /右孩子指針struct BiTNode *next; /下一結(jié)點指針BiTNode, *BiTree;Status NumJudge(char ch20)/限制輸入數(shù)據(jù)必須為大于零的整形char ch120;int num;while(1)scanf("%s",ch); num=atoi(ch); /將字符串轉(zhuǎn)換為整型itoa(num,ch1,10); /將整型轉(zhuǎn)換為字符串型if(strcmp(ch,ch1)=0&&num>0)break;elseprintf("請輸入一個大于零的整數(shù): ");return

3、num;/NumJudgeStatus InitBiTree(BiTree &T)/構(gòu)造空二叉樹Tif(!(T=(BiTree)malloc(sizeof(BiTNode)exit(ERROR); /若申請空間失敗則退出T->next=NULL;printf("nt空二叉樹構(gòu)建成功!nn");return OK;/InitBiTreeStatus DestroyTree(BiTree &T,BiTree t)/銷毀二叉樹if(T)free(T);T=NULL;printf("t二叉樹銷毀成功!n");if(t) DestroyTre

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

5、reateBiTree(BiTree &T,int i,int j,TElemType ch)/按先序次序輸入二叉樹中結(jié)點的值(一個字符),空格字符表示該結(jié)點為空/構(gòu)造二叉鏈表示的二叉樹TTElemType ch1;int k;char str20;if(i=0)printf("n 按先序順序建立二叉樹:請按提示輸入相應(yīng)的數(shù)據(jù)(一個字符),若提示結(jié)點數(shù)值為空,n 請輸入空格nn"); printf("%5s請輸入樹根: "," ");if(i!=0&&i>=j)printf("%5s請輸入%c的

6、左孩子: "," ",ch); if(j!=0&&j>i)printf("%5s請輸入%c的右孩子: "," ",ch);while(1) /限制輸入數(shù)據(jù)必須為字符型,否則重新輸入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)prin

7、tf("%5s您只能輸入一個字符: "," ");ch1=str0; /獲取輸入的準(zhǔn)確字符型數(shù)據(jù)if(ch1=' ')T=NULL;return ERROR; /輸入空格則為根結(jié)點為空if(ch1!=' ')if(!(T=(BiTree)malloc(sizeof(BiTNode) exit(ERROR);T->data=ch1; /生成根結(jié)點ch=T->data;i+;CreateBiTree(T->lchild,i,j,ch); /構(gòu)造左子樹j=i;j+;CreateBiTree(T->rchi

8、ld,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); TreeDepth(T->rchild,l,h);return h;/TreeDepthStatus GetRootElem(BiTree T)/獲取根結(jié)點值printf("該二叉樹的根結(jié)點值為: %cnn",T->data);return O

9、K;/GetRootElemStatus SaveElem(BiTree T,BiTree *Q,int i)/根據(jù)完全二叉樹中,若本節(jié)點位置序號為i,則其左孩子結(jié)點為2i,右孩子為2i+1的方法/保存二叉樹的有效結(jié)點至指針數(shù)組Q特定的位置if(T)Qi=T; SaveElem(T->lchild,Q,2*i);SaveElem(T->rchild,Q,2*i+1);return OK;/SaveElemStatus Lev_Traverse(BiTree T,int h)/按層次從上到下,每層從左到右的順序顯示樹狀二叉樹if(T=NULL)printf("ntt二叉樹目

10、前為空樹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=NULL; SaveElem(T,Q,n); /將目前有效結(jié)點按照滿二叉樹的序號存儲printf(" 提示:規(guī)定下圖中的有效結(jié)點的位置序號從1開始按從上到下,從左到右的順序依次遞增n");for(i=1;i<=(pow(2,h)+1);i+) /樹形顯示二叉

11、樹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);if(!Qi)printf(" ");for(j=0;j<pow(2,k+1)-1;j+)printf(" ");printf("nn");i=0;j=0;return OK;/Lev_TraverseStatu

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

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

14、i); /遞歸遍歷左子樹LastPrint(T->rchild,i); /遞歸遍歷右子樹printf("%-5c",T->data); /訪問Ti=0;return OK;/LastPrintStatus PreOrderTraverse(BiTree T) /按先序(非遞歸)遍歷二叉樹TBiTree p,S,q;int flag=0;if(!(S=(BiTree)malloc(sizeof(BiTNode)exit(ERROR);S->next=NULL; /建立空棧Sp=T; printf("n先序(非遞歸)遍歷結(jié)果如下:n");w

15、hile(1)while(1) /遍歷存儲并訪問左子樹直到根結(jié)點左孩子不存在printf("%-5c",p->data);q=S->next;S->next=p;p->next=q; /當(dāng)前結(jié)點進(jìn)棧if(p->lchild)p=p->lchild;elsebreak;while(1) /棧頂指針出棧,如果當(dāng)前棧頂指針的右孩子存在則跳出循環(huán)p=S->next;S->next=p->next; if(!S->next&&!p->rchild)flag=1;break; /如果棧空并且當(dāng)前結(jié)點右孩子

16、不存在則遍歷結(jié)束if(p->rchild)p=p->rchild;break;if(flag=1)break;printf("nn");return OK;/PreOrderTraverseStatus InOrderTraverse(BiTree T) / 中序遍歷(非遞歸)二叉樹TBiTree p,S,q;if(!(S=(BiTree)malloc(sizeof(BiTNode)exit(ERROR);S->next=NULL; /建立空棧Sp=T; printf("n中序(非遞歸)遍歷結(jié)果如下:n");while(p|S->

17、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); /輸出棧中元素elsereturn ERROR; p=p->rchild;printf("nn");return OK;/InOrderTraverseStatus PostOrderTraverse(BiTree T) /后序遍歷(非遞歸)二叉樹TBiTree p

18、,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é)點左右孩子都不存在則跳出q=S->next;S->next=p;p->next=q; /當(dāng)前結(jié)點進(jìn)棧if(p->lchild)p=p->lchild; elseif(p->rchild)p=p->rchild;elsebreak;while(S->next)

19、 p=S->next;S->next=p->next; /棧頂指針出棧并訪問printf("%-5c",p->data);if(!S->next)break; /若棧空則跳出if(p=S->next->rchild)p=S->next; /若當(dāng)前結(jié)點為棧頂指針的右孩子,則繼續(xù)出棧elseif(S->next->rchild) /棧頂指針右孩存在,指針移至棧頂指針的右孩子后跳出循環(huán)p=S->next->rchild;break;if(!S->next)break; /若??談t跳出循環(huán)printf(&

20、quot;nn");return OK;/PostOrderTraverseStatus GetElemSum(BiTree T)/計算二叉樹中總結(jié)點的個數(shù)BiTree p,*q;int l=0,h=0;if(!(q=(BiTree *)malloc(int(pow(2,TreeDepth(T,l,h)+1) * 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+

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

22、uot;%-5c",p->data);if(p->lchild)qtail+=p->lchild;if(p->rchild)qtail+=p->rchild;printf("nn");return OK;/LevelOrderPrintStatus GetElemNum(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(ERRO

23、R);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->lchild)qtail+=p->lchild; if(p->rchild)qtail+=p->rchild;printf("n元素%c在二叉樹中的個數(shù)為: %dn",e,num);printf("元素%c在二叉樹中的位置序號為:&quo

24、t;,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=(BiTree *)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-

25、>rchild)num+;if(p->lchild)qtail+=p->lchild; if(p->rchild)qtail+=p->rchild;return num;/GetLeafNumStatus LBrother(BiTree T,int sum)/求第num個結(jié)點的左兄弟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("請輸入要查找的位置序號

26、: ");num=NumJudge(str);if(num>sum)printf("您輸入的位置序號大于有效結(jié)點個數(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+

27、)if(qi->lchild=qnum|qi->rchild=qnum)break;if(qi->lchild=qnum)printf("位置%d的%c沒有左兄弟n",num,qnum->data);if(qi->rchild=qnum)printf("位置%d的%c的左兄弟為: %cn",num,qnum->data,qi->lchild->data);return OK;/LBrotherStatus RBrother(BiTree T,int sum)/求第num個結(jié)點的右兄弟BiTree p,*q;

28、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é)點個數(shù)n");return ERROR;while(head<tail)p=qhead+; if(num=tail-2)break;if(p->lchild)qtail+=p-&g

29、t;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->rchild|qi->rchild=qnum)printf("位置%d的%c沒有右兄弟n",num,qnum->data);if(qi->rchild&&qi->

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

31、uot;);num=NumJudge(str);if(num>sum)printf("您輸入的位置序號大于有效結(jié)點個數(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(qnum->lchild)printf("位置%d的%c的左孩子為: %cn",num,qnum->data,qnum->lchild

32、->data);elseprintf("位置%d的%c的左孩子不存在n",num,qnum->data);return OK;/LchildStatus Rchild(BiTree T,int sum)/求第num個結(jié)點的右孩子BiTree 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);i

33、f(num>sum)printf("您輸入的位置序號大于有效結(jié)點個數(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(qnum->rchild)printf("位置%d的%c的右孩子為: %cn",num,qnum->data,qnum->rchild->data);elseprintf(&qu

34、ot;位置%d的%c的右孩子不存在n",num,qnum->data);return OK;/RchildStatus Partents(BiTree T,int sum)/求第num個結(jié)點的雙親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);if(num>sum)printf(&q

35、uot;您輸入的位置序號大于有效結(jié)點個數(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->rchild=qnum)break;prin

36、tf("位置%d的%c的雙親為: %cn",num,qnum->data,qi->data);return OK;/PartentsStatus TreeDelete(BiTree &T,int sum)/刪除第num個結(jié)點BiTree p,p1,*q;if(!(q=(BiTree *)malloc(GetElemSum(T) * sizeof(BiTNode)exit(ERROR);int i,num,head=1,tail=2,a=0,b=0;char str20;q1=T;printf("請輸入要刪除結(jié)點的位置序號: ");nu

37、m=NumJudge(str);if(num>sum)printf("n您輸入的位置序號大于有效結(jié)點個數(shù)nn");return ERROR;if(num=1)printf("t對不起,您不能刪除根結(jié)點,若想刪除根結(jié)點,請選擇銷毀樹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;for(i=1;i<num;i+)if(

38、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(qi->rchild=qnum)qi->rchild=NULL;p1=NULL;DestroyTree(p1,qnum);printf("n刪除結(jié)點成功n"); return OK;/TreeDeleteStatus TreeInsert(BiTr

39、ee &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=' ',str20;q1=T;printf("請輸入要插入結(jié)點的位置序號: ");num=NumJudge(str);if(num>sum)printf("n您輸入的位置序號大于有效結(jié)點個數(shù)nn");return ERROR;while(h

40、ead<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)printf("您輸入的位置序號已有左子樹和右子樹,無法再此位置插入nn");return ERROR;if(qnum->lchild&&!qnum->rchild)printf("位置%d的%c處只能生成右子樹,確定插入/退

41、出(y/n): ",num,qnum->data);while(1) scanf("%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->rchild=p1;if(strcmp(str,&

42、quot;n")=0)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("選擇錯誤,請重新輸入: ");if(strcmp(str,"

43、y")=0)printf("請輸入插入子樹的信息: n");CreateBiTree(p1,a,b,ch);if(p1)qnum->lchild=p1;if(strcmp(str,"n")=0)return ERROR;if(!qnum->lchild&&!qnum->rchild) printf("請輸入插入子樹的信息: n");CreateBiTree(p1,a,b,ch); printf("tt你想把新建的樹作為位置%d的%c處的: n",num,qnum->

44、data); printf("tt 1左子樹 2右子樹n");printf("ntt請輸入你的選擇: ");while(1) scanf("%s",str);if(strcmp(str,"1")=0|strcmp(str,"2")=0)break;elseprintf("選擇錯誤,請重新輸入: ");if(strcmp(str,"1")=0)if(p1)qnum->lchild=p1;if(strcmp(str,"2")=0)if

45、(p1)qnum->rchild=p1; printf("插入子樹成功n");return OK;/TreeInsertStatus Modify(BiTree T,int sum,int &n)/修改二叉樹第num個結(jié)點的值BiTree p,*q;if(!(q=(BiTree *)malloc(GetElemSum(T) * sizeof(BiTNode)exit(ERROR);int k,num,head=1,tail=2;char str20;q1=T;n=0;printf("請輸入要修改結(jié)點的位置序號: ");num=NumJudg

46、e(str);if(num>sum)printf("n您輸入的位置序號大于有效結(jié)點個數(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;printf("%5s請輸入新的結(jié)點值: "," ");while(1)fflush(stdin);for(k=0;k<20;k+)strk=getchar();

47、if(strk='n')break;if(k=0)printf("%5s請輸入一個字符后再按Enter鍵: "," ");if(k=1)break;if(k>1)printf("%5s您只能輸入一個字符: "," ");qnum->data=str0;printf("n 修改成功n");n=1;return OK;/Modifyint MainMenu() /主菜單函數(shù)system("cls");int choose;char str20;prin

48、tf("nttt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*");printf("nttt 計本102 盧榮盼 1018014052");printf("nttt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*");printf("nttt 1建立空樹n");printf("nttt 2構(gòu)造二叉樹n");printf("nttt 3顯示樹狀二叉樹n");printf("nttt 4遍歷二叉樹 ->

49、>進(jìn)入子菜單n");printf("nttt 5查看二叉樹信息 ->>進(jìn)入子菜單n");printf("nttt 6對二叉樹進(jìn)行操作 ->>進(jìn)入子菜單n");printf("nttt 0退出程序");printf("nttt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*");printf("nttt請輸入你的選擇: ");while(1)scanf("%s",str);if(strcmp(str,&quo

50、t;0")=0|strcmp(str,"1")=0|strcmp(str,"2")=0|strcmp(str,"3")=0|strcmp(str,"4")=0|strcmp(str,"5")=0|strcmp(str,"6")=0)choose=atoi(str);break;elseprintf("ttt選擇錯誤請重新輸入: ");if(choose=0)printf("nnt謝謝使用本程序nn");return choos

51、e;/MainMenu()int Menu() /主菜單函數(shù)system("cls");int choose;char str20;printf("nttt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*");printf("nttt 請選擇對應(yīng)的選項按對應(yīng)的方式遍歷二叉樹");printf("nttt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*");printf("ntttt1按先序(遞歸)遍歷二叉樹n");printf(&quo

52、t;ntttt2按中序(遞歸)遍歷二叉樹n");printf("ntttt3按后序(遞歸)遍歷二叉樹n");printf("ntttt4按先序(非遞歸)遍歷二叉樹n");printf("ntttt5按中序(非遞歸)遍歷二叉樹n");printf("ntttt6按后序(非遞歸)遍歷二叉樹n");printf("ntttt7按層次(非遞歸)遍歷二叉樹n");printf("ntttt0返回主菜單");printf("nttt*=*=*=*=*=*=*=*=*=

53、*=*=*=*=*=*=*=*=*=*=*n");printf("ttt請輸入你的選擇: ");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(str,"6")=0|strc

54、mp(str,"7")=0)choose=atoi(str);break;elseprintf("ttt選擇錯誤請重新輸入: ");return choose;/Menu()int Menu1() /查看二叉樹信息菜單system("cls");int choose;char str20,str120;printf("nt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*");printf("nt 請選擇對應(yīng)的選項查看當(dāng)前二叉樹的

55、信息");printf("nt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*");printf("nt 1返回根結(jié)點值 2二叉樹的深度n");printf("nt 3二叉樹的總結(jié)點個數(shù) 4二叉樹中度為2的結(jié)點個數(shù)n");printf("nt 5二叉樹中度為1的結(jié)點個數(shù) 6二叉樹中葉子結(jié)點個數(shù)n");printf("nt 7某一值的結(jié)點個數(shù)及位置 8二叉樹中某結(jié)點的左孩子n");printf("nt 9二叉樹中某結(jié)點的右孩子 10二叉樹中某結(jié)點的左兄弟n");printf("nt 11二叉樹中某結(jié)點的右兄弟 12二叉樹中某結(jié)點的雙親n");printf("

溫馨提示

  • 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

提交評論