#include<stdio.h>#include<stdlib.h>#include<string.h>#include<malloc.h>#define maxsize 50typedef struct Node{ char data; struct Node *LChild; struct Node *RChild;}BiTNode,*BiTree;char *ch="ABD@@E@G@@CF@@@";int index=0;typedef struct{ BiTree elem[maxsize]; int front; int rear;}SeqQueue;void InitQueue(SeqQueue *Q){ Q->rear=Q->front=0;}int IsEmpty(SeqQueue *Q){ if(Q->rear==Q->front){ return (1); } else{ return (0); }}int EnterQueue(SeqQueue *Q,BiTree x){ if((Q->rear+1)%maxsize==Q->front){ return (0); } Q->elem[Q->rear]=x; Q->rear=(Q->rear+1)%maxsize; return (1);}int DeleteQueue(SeqQueue *Q,BiTree *a){ if(Q->rear!=Q->front){ *a=Q->elem[Q->front]; Q->front=(Q->front+1)%maxsize; return (1); } return (0);}void CreateBiTree(BiTree *bt){ if(strlen(ch)==0){ return ; } if(ch[index]=='@'){ bt=NULL; index++; } else{ *bt=(BiTree)malloc(sizeof(BiTNode)); (*bt)->data=ch[index]; index++; (*bt)->LChild=NULL; (*bt)->RChild=NULL; printf("left\n"); CreateBiTree(&(*bt)->LChild); printf("right\n"); CreateBiTree(&(*bt)->RChild); }}void PreOrder(BiTree root){ if(!root){ return; } printf("%c ",root->data); PreOrder(root->LChild); PreOrder(root->RChild);}void InOrder(BiTree root){ PreOrder(root->LChild); if(!root){ return; } printf("%c ",root->data); PreOrder(root->RChild);}void PostOrder(BiTree root){ PreOrder(root->LChild); PreOrder(root->RChild); if(!root){ return; } printf("%c ",root->data);}int main(){ char ch; int k; do{ printf("\n"); printf("1.CreateBiTree\n"); printf("2.PreOrderBiTree\n"); printf("3.InOrderBiTree\n"); printf("4.PostOrderBiTree\n"); printf("5.PrintBiTree\n"); printf("6.preorderleaf\n"); printf("7.PostTreeDepth\n"); printf("8.PrintLeaf\n"); printf("9.exit\n"); printf("===========================\n"); printf("choose(1,2,3,4,5,6,7,8,9)\n"); scanf("%d \n",&k); switch(k){ case 1: BiTree Tree; CreateBiTree(&Tree); case 2: PreOrder(Tree); case 3: InOrder(Tree); case 4: PostOrder(Tree); } printf("\n---------------------------\n"); }while(k>=1&&k<=9);}
scanf输入后为何还需输入一个字符,又为啥直接运行了其他case的代码