




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、#include "stdio.h"#include "stdlib.h"#include "string.h"#include "math.h"typedef char TElemType; /定義結(jié)點(diǎn)數(shù)據(jù)為字符型typedef int Status; /定義函數(shù)類(lèi)型為int型#define ERROR 0#define OK 1typedef struct BiTNode /定義結(jié)構(gòu)體TElemType data; /結(jié)點(diǎn)數(shù)值struct BiTNode *lchild; /左孩子指針struct BiTNod
2、e *rchild; /右孩子指針struct BiTNode *next; /下一結(jié)點(diǎn)指針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("請(qǐng)輸入一個(gè)大于零的整數(shù): ");return
3、num;/NumJudgeStatus InitBiTree(BiTree &T)/構(gòu)造空二叉樹(shù)Tif(!(T=(BiTree)malloc(sizeof(BiTNode)exit(ERROR); /若申請(qǐng)空間失敗則退出T->next=NULL;printf("nt空二叉樹(shù)構(gòu)建成功!nn");return OK;/InitBiTreeStatus DestroyTree(BiTree &T,BiTree t)/銷(xiāo)毀二叉樹(shù)if(T)free(T);T=NULL;printf("t二叉樹(shù)銷(xiāo)毀成功!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)/清空二叉樹(shù)if(T) ClearBiTree(T->lchild,sum,i); ClearBiTree(T->rchild,sum,i); free(T); i+; if(i=sum)printf("t二叉樹(shù)清空成功!n");T=NULL; return OK;/ClearBiTreeStatus C
5、reateBiTree(BiTree &T,int i,int j,TElemType ch)/按先序次序輸入二叉樹(shù)中結(jié)點(diǎn)的值(一個(gè)字符),空格字符表示該結(jié)點(diǎn)為空/構(gòu)造二叉鏈表示的二叉樹(shù)TTElemType ch1;int k;char str20;if(i=0)printf("n 按先序順序建立二叉樹(shù):請(qǐng)按提示輸入相應(yīng)的數(shù)據(jù)(一個(gè)字符),若提示結(jié)點(diǎn)數(shù)值為空,n 請(qǐng)輸入空格nn"); printf("%5s請(qǐng)輸入樹(shù)根: "," ");if(i!=0&&i>=j)printf("%5s請(qǐng)輸入%c的
6、左孩子: "," ",ch); if(j!=0&&j>i)printf("%5s請(qǐng)輸入%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請(qǐng)輸入一個(gè)字符后再按Enter鍵: "," ");if(k=1)break;if(k>1)prin
7、tf("%5s您只能輸入一個(gè)字符: "," ");ch1=str0; /獲取輸入的準(zhǔn)確字符型數(shù)據(jù)if(ch1=' ')T=NULL;return ERROR; /輸入空格則為根結(jié)點(diǎn)為空if(ch1!=' ')if(!(T=(BiTree)malloc(sizeof(BiTNode) exit(ERROR);T->data=ch1; /生成根結(jié)點(diǎn)ch=T->data;i+;CreateBiTree(T->lchild,i,j,ch); /構(gòu)造左子樹(shù)j=i;j+;CreateBiTree(T->rchi
8、ld,i,j,ch); /構(gòu)造右子樹(shù)i=0;j=0;return OK;/CreateBitreeStatus TreeDepth(BiTree T,int l,int &h) /若二叉樹(shù)存在,返回其深度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é)點(diǎn)值printf("該二叉樹(shù)的根結(jié)點(diǎn)值為: %cnn",T->data);return O
9、K;/GetRootElemStatus SaveElem(BiTree T,BiTree *Q,int i)/根據(jù)完全二叉樹(shù)中,若本節(jié)點(diǎn)位置序號(hào)為i,則其左孩子結(jié)點(diǎn)為2i,右孩子為2i+1的方法/保存二叉樹(shù)的有效結(jié)點(diǎn)至指針數(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)/按層次從上到下,每層從左到右的順序顯示樹(shù)狀二叉樹(shù)if(T=NULL)printf("ntt二叉樹(shù)目
10、前為空樹(shù)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é)點(diǎn)按照滿二叉樹(shù)的序號(hào)存儲(chǔ)printf(" 提示:規(guī)定下圖中的有效結(jié)點(diǎn)的位置序號(hào)從1開(kāi)始按從上到下,從左到右的順序依次遞增n");for(i=1;i<=(pow(2,h)+1);i+) /樹(shù)形顯示二叉
11、樹(shù)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)/按先序次序(遞歸)訪問(wèn)二叉樹(shù)if(i=0)printf("n先序(遞歸)遍歷結(jié)果如下:n");if(T)i+;printf("%-5c",T->data); /訪問(wèn)TFirstPrint(T->lchild,i); /遞歸遍歷左子樹(shù)FirstPrint(T->rchild,i); /遞歸遍歷右子樹(shù)i=0;return OK;/FirstPrintBiTreeStatus MiddlePrint(BiTree T,int i)/按中序次序(遞歸)訪問(wèn)二叉樹(shù)if(i=0)printf
13、("n中序(遞歸)遍歷結(jié)果如下:n");if(T)i+;MiddlePrint(T->lchild,i); /遞歸遍歷左子樹(shù)printf("%-5c",T->data); /訪問(wèn)TMiddlePrint(T->rchild,i); /遞歸遍歷右子樹(shù)i=0;return OK;/MiddlePrintStatus LastPrint(BiTree T,int i)/按后序次序(遞歸)訪問(wèn)二叉樹(shù)if(i=0)printf("n后序(遞歸)遍歷結(jié)果如下:n");if(T)i+;LastPrint(T->lchild,
14、i); /遞歸遍歷左子樹(shù)LastPrint(T->rchild,i); /遞歸遍歷右子樹(shù)printf("%-5c",T->data); /訪問(wèn)Ti=0;return OK;/LastPrintStatus PreOrderTraverse(BiTree T) /按先序(非遞歸)遍歷二叉樹(shù)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) /遍歷存儲(chǔ)并訪問(wèn)左子樹(shù)直到根結(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;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é)點(diǎn)右孩子
16、不存在則遍歷結(jié)束if(p->rchild)p=p->rchild;break;if(flag=1)break;printf("nn");return OK;/PreOrderTraverseStatus InOrderTraverse(BiTree T) / 中序遍歷(非遞歸)二叉樹(shù)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) /后序遍歷(非遞歸)二叉樹(shù)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) /遍歷左子樹(shù),若當(dāng)前結(jié)點(diǎn)左右孩子都不存在則跳出q=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)
19、 p=S->next;S->next=p->next; /棧頂指針出棧并訪問(wèn)printf("%-5c",p->data);if(!S->next)break; /若棧空則跳出if(p=S->next->rchild)p=S->next; /若當(dāng)前結(jié)點(diǎn)為棧頂指針的右孩子,則繼續(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)/計(jì)算二叉樹(shù)中總結(jié)點(diǎn)的個(gè)數(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)/二叉樹(shù)T存在,層序遍歷二叉樹(shù)/將二叉樹(shù)中的結(jié)點(diǎn)按從上到下,從左到右的順序存至指針數(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在二叉樹(shù)T中的個(gè)數(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ù)中的個(gè)數(shù)為: %dn",e,num);printf("元素%c在二叉樹(shù)中的位置序號(hào)為:&quo
24、t;,e);for(j=0;j<i;j+)printf("%-4d",aj);printf("n");return num;/GetElemNumStatus GetLeafNum(BiTree T)/計(jì)算二叉樹(shù)T中葉子個(gè)數(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個(gè)結(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("請(qǐng)輸入要查找的位置序號(hào)
26、: ");num=NumJudge(str);if(num>sum)printf("您輸入的位置序號(hào)大于有效結(jié)點(diǎn)個(gè)數(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沒(méi)有左兄弟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沒(méi)有左兄弟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個(gè)結(jié)點(diǎn)的右兄弟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("請(qǐng)輸入要查找的位置序號(hào): ");num=NumJudge(str);if(num>sum)printf("您輸入的位置序號(hào)大于有效結(jié)點(diǎn)個(gè)數(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沒(méi)有右兄弟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沒(méi)有右兄弟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個(gè)結(jié)點(diǎn)的左孩子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ǐng)輸入要查找的位置序號(hào): &q
31、uot;);num=NumJudge(str);if(num>sum)printf("您輸入的位置序號(hào)大于有效結(jié)點(diǎn)個(gè)數(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個(gè)結(jié)點(diǎn)的右孩子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ǐng)輸入要查找的位置序號(hào): ");num=NumJudge(str);i
33、f(num>sum)printf("您輸入的位置序號(hào)大于有效結(jié)點(diǎn)個(gè)數(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個(gè)結(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("請(qǐng)輸入要查找的位置序號(hào): ");num=NumJudge(str);if(num>sum)printf(&q
35、uot;您輸入的位置序號(hào)大于有效結(jié)點(diǎn)個(gè)數(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沒(méi)有雙親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個(gè)結(jié)點(diǎn)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("請(qǐng)輸入要?jiǎng)h除結(jié)點(diǎn)的位置序號(hào): ");nu
37、m=NumJudge(str);if(num>sum)printf("n您輸入的位置序號(hào)大于有效結(jié)點(diǎn)個(gè)數(shù)nn");return ERROR;if(num=1)printf("t對(duì)不起,您不能刪除根結(jié)點(diǎn),若想刪除根結(jié)點(diǎn),請(qǐng)選擇銷(xiāo)毀樹(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;for(i=1;i<num;i+)if(
38、qi->lchild=qnum|qi->rchild=qnum)break; printf("n您刪除了如下子樹(shù):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é)點(diǎn)成功n"); return OK;/TreeDeleteStatus TreeInsert(BiTr
39、ee &T,int sum)/在第num個(gè)生成子樹(shù)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("請(qǐng)輸入要插入結(jié)點(diǎn)的位置序號(hào): ");num=NumJudge(str);if(num>sum)printf("n您輸入的位置序號(hào)大于有效結(jié)點(diǎn)個(gè)數(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("您輸入的位置序號(hào)已有左子樹(shù)和右子樹(shù),無(wú)法再此位置插入nn");return ERROR;if(qnum->lchild&&!qnum->rchild)printf("位置%d的%c處只能生成右子樹(shù),確定插入/退
41、出(y/n): ",num,qnum->data);while(1) scanf("%s",str);if(strcmp(str,"y")=0|strcmp(str,"n")=0)break;elseprintf("選擇錯(cuò)誤,請(qǐng)重新輸入: ");if(strcmp(str,"y")=0)printf("請(qǐng)輸入插入子樹(shù)的信息: 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處只能生成左子樹(shù),確定插入/退出(y/n): ",num,qnum->data);while(1) scanf("%s",str);if(strcmp(str,"y")=0|strcmp(str,"n")=0)break;elseprintf("選擇錯(cuò)誤,請(qǐng)重新輸入: ");if(strcmp(str,"
43、y")=0)printf("請(qǐng)輸入插入子樹(shù)的信息: n");CreateBiTree(p1,a,b,ch);if(p1)qnum->lchild=p1;if(strcmp(str,"n")=0)return ERROR;if(!qnum->lchild&&!qnum->rchild) printf("請(qǐng)輸入插入子樹(shù)的信息: n");CreateBiTree(p1,a,b,ch); printf("tt你想把新建的樹(shù)作為位置%d的%c處的: n",num,qnum->
44、data); printf("tt 1左子樹(shù) 2右子樹(shù)n");printf("ntt請(qǐng)輸入你的選擇: ");while(1) scanf("%s",str);if(strcmp(str,"1")=0|strcmp(str,"2")=0)break;elseprintf("選擇錯(cuò)誤,請(qǐng)重新輸入: ");if(strcmp(str,"1")=0)if(p1)qnum->lchild=p1;if(strcmp(str,"2")=0)if
45、(p1)qnum->rchild=p1; printf("插入子樹(shù)成功n");return OK;/TreeInsertStatus Modify(BiTree T,int sum,int &n)/修改二叉樹(shù)第num個(gè)結(jié)點(diǎn)的值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("請(qǐng)輸入要修改結(jié)點(diǎn)的位置序號(hào): ");num=NumJudg
46、e(str);if(num>sum)printf("n您輸入的位置序號(hào)大于有效結(jié)點(diǎn)個(gè)數(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請(qǐng)輸入新的結(jié)點(diǎn)值: "," ");while(1)fflush(stdin);for(k=0;k<20;k+)strk=getchar();
47、if(strk='n')break;if(k=0)printf("%5s請(qǐng)輸入一個(gè)字符后再按Enter鍵: "," ");if(k=1)break;if(k>1)printf("%5s您只能輸入一個(gè)字符: "," ");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 計(jì)本102 盧榮盼 1018014052");printf("nttt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*");printf("nttt 1建立空樹(shù)n");printf("nttt 2構(gòu)造二叉樹(shù)n");printf("nttt 3顯示樹(shù)狀二叉樹(shù)n");printf("nttt 4遍歷二叉樹(shù) ->
49、>進(jìn)入子菜單n");printf("nttt 5查看二叉樹(shù)信息 ->>進(jìn)入子菜單n");printf("nttt 6對(duì)二叉樹(shù)進(jìn)行操作 ->>進(jìn)入子菜單n");printf("nttt 0退出程序");printf("nttt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*");printf("nttt請(qǐng)輸入你的選擇: ");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選擇錯(cuò)誤請(qǐng)重新輸入: ");if(choose=0)printf("nnt謝謝使用本程序nn");return choos
51、e;/MainMenu()int Menu() /主菜單函數(shù)system("cls");int choose;char str20;printf("nttt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*");printf("nttt 請(qǐng)選擇對(duì)應(yīng)的選項(xiàng)按對(duì)應(yīng)的方式遍歷二叉樹(shù)");printf("nttt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*");printf("ntttt1按先序(遞歸)遍歷二叉樹(shù)n");printf(&quo
52、t;ntttt2按中序(遞歸)遍歷二叉樹(shù)n");printf("ntttt3按后序(遞歸)遍歷二叉樹(shù)n");printf("ntttt4按先序(非遞歸)遍歷二叉樹(shù)n");printf("ntttt5按中序(非遞歸)遍歷二叉樹(shù)n");printf("ntttt6按后序(非遞歸)遍歷二叉樹(shù)n");printf("ntttt7按層次(非遞歸)遍歷二叉樹(shù)n");printf("ntttt0返回主菜單");printf("nttt*=*=*=*=*=*=*=*=*=
53、*=*=*=*=*=*=*=*=*=*=*n");printf("ttt請(qǐng)輸入你的選擇: ");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選擇錯(cuò)誤請(qǐng)重新輸入: ");return choose;/Menu()int Menu1() /查看二叉樹(shù)信息菜單system("cls");int choose;char str20,str120;printf("nt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*");printf("nt 請(qǐng)選擇對(duì)應(yīng)的選項(xiàng)查看當(dāng)前二叉樹(shù)的
55、信息");printf("nt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*");printf("nt 1返回根結(jié)點(diǎn)值 2二叉樹(shù)的深度n");printf("nt 3二叉樹(shù)的總結(jié)點(diǎn)個(gè)數(shù) 4二叉樹(shù)中度為2的結(jié)點(diǎn)個(gè)數(shù)n");printf("nt 5二叉樹(shù)中度為1的結(jié)點(diǎn)個(gè)數(shù) 6二叉樹(shù)中葉子結(jié)點(diǎn)個(gè)數(shù)n");printf("nt 7某一值的結(jié)點(diǎn)個(gè)數(shù)及位置 8二叉樹(shù)中某結(jié)點(diǎn)的左孩子n");printf("nt 9二叉樹(shù)中某結(jié)點(diǎn)的右孩子 10二叉樹(shù)中某結(jié)點(diǎn)的左兄弟n");printf("nt 11二叉樹(shù)中某結(jié)點(diǎn)的右兄弟 12二叉樹(shù)中某結(jié)點(diǎn)的雙親n");printf("
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《機(jī)械設(shè)計(jì)基礎(chǔ)》課件-第19章 機(jī)械的平衡與調(diào)速
- 肝腎聯(lián)合移植的手術(shù)與抗排斥治療
- 項(xiàng)目質(zhì)量安全課件
- 交通安全教育培訓(xùn)課件
- 音樂(lè)說(shuō)課課件購(gòu)買(mǎi)
- 油田開(kāi)發(fā)項(xiàng)目環(huán)境影響報(bào)告書(shū)(模板)
- 電網(wǎng)側(cè)獨(dú)立儲(chǔ)能示范項(xiàng)目運(yùn)營(yíng)管理方案(范文模板)
- 大數(shù)據(jù)安全態(tài)勢(shì)感知解決方案
- 無(wú)人機(jī)森林防火應(yīng)用探索
- 西醫(yī)內(nèi)科題庫(kù)(含答案)
- 醫(yī)療設(shè)備維護(hù)服務(wù)行業(yè)可行性分析報(bào)告
- CNAS-CL01-2018內(nèi)審檢查記錄表
- 2024年中級(jí)經(jīng)濟(jì)師考試題庫(kù)含答案(a卷)
- 八年級(jí)下冊(cè)物理計(jì)算題專練(解析版)
- 原生質(zhì)體的分離培養(yǎng)與細(xì)胞培養(yǎng)-原生質(zhì)體的分離培養(yǎng)
- 湘美版小學(xué)二年級(jí)下冊(cè)美術(shù)全冊(cè)教案
- 山東農(nóng)業(yè)工程學(xué)院輔導(dǎo)員考試試題2024
- 《會(huì)計(jì)學(xué)》課程中的思政案例誠(chéng)信為本與職業(yè)道德的堅(jiān)守
- 新生兒低血糖相關(guān)課件
- 物業(yè)安全生產(chǎn)培訓(xùn)
- 嚴(yán)重精神障礙患者家庭護(hù)理培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論