二叉树建立成功了,而且零报错,但是运行后输入元素却打印不出来了
#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;
}