为什么二叉树建立后输入元素进去后却打印不出来?

二叉树建立成功了,而且零报错,但是运行后输入元素却打印不出来了

问题相关代码如下:

#include <stdio.h>
#include <stdlib.h>
#define maxlength 100
#define maxsize 100
typedef int elemtype;

typedef struct binode{//定义二叉树
elemtype data;
struct binode *lchild;
struct binode *rchild;
}bitreenode;

typedef struct {//定义存放二叉树节点的栈
bitreenode *node[maxsize];
int top;
}stack;

int initstack(stack **s){//初始化栈
(*s)=(stack *)malloc(sizeof(stack));
(*s)->top=-1;
}

int destorystack(stack **s){//释放栈的空间
free(*s);
}

int initbitree(bitreenode **b){//初始化二叉树
(*b)=(bitreenode *)malloc(sizeof(bitreenode));
(*b)->lchild=NULL;
(*b)->rchild=NULL;
}

int creatbitree(bitreenode **b){//二叉树的创立
bitreenode *t;
elemtype e;
elemtype elems[maxlength];
stack *s;
int i,k;
int h,f;
t=NULL;
i=0;
initstack(&s);
printf("请输入你要输入的元素个数\n");
scanf("%d",&h);
printf("请输入你要输入的元素\n");
for(f=0;f<h;f++){
for(i=0;i<h;i++)
scanf("%d",elems[i]);
e=elems[i];
}
while(e!='\0'){
switch(e){
case'(':
s->top++;
s->node[s->top]=t;
k=1;
break;
case')':
s->top--;
break;
case',':
k=2;
break;
default:
initbitree(&t);
t->data=e;
if(i==0){
(*b)=t;
}
else{
switch(k){
case 1:
s->node[s->top]->lchild=t;
break;
case 2:
s->node[s->top]->rchild=t;
break;
}
}
}
i++;
e=elems[i];
}
destorystack(&s);
}

int printfbitree(bitreenode *b){
if(b!=NULL){
printf("%d",b->data);
if(b->lchild!=NULL||b->rchild!=NULL){
printf("(");
printfbitree(b->lchild);}
if(b->rchild!=NULL){
printf(",");
printfbitree(b->rchild);
printf(")"); }
}
}

int destorybitree(bitreenode **b){
free(*b);
printf("二叉树已清空\n");
}

int main()
{
bitreenode *b;
initbitree(&b);
creatbitree(&b);
printf("\n");
printf("你当前输入的元素为\n");
printfbitree(b);
destorybitree(&b);
return 0;
}

感觉运行creatbitree(bitreenode **b)那里的循环输入部分程序一直循环不进去,但是改不出来问题所在
希望能够的到解答和帮助,一定会积极采纳!谢谢!

creatbitree()函数里面的while循环中,switch(e)下的default中没有对应的break,我摘录了出来,你根据需求看加哪一行。

    switch(e){
    case'(':
        s->top++;
        s->node[s->top]=t;
        k=1;
    break;
    case')':
        s->top--;
    break;
    case',':
        k=2;
    break;
    default:     //default下对应的break应该加在下面,你根据需求看加哪一行      
        initbitree(&t);
        t->data=e;
        if(i==0){
        (*b)=t;
    }