关于二叉排序树的中序遍历,不知道里面那里有问题,麻烦大家看看,急
#include<stdio.h>#include<malloc.h>typedefstructbitnode{intdata;structbitnode*lchild,...
#include<stdio.h>
#include<malloc.h>
typedef struct bitnode
{
int data;
struct bitnode *lchild,*rchild;
}Bitnode,*bitree;
bitree insert_bitree(Bitnode *bt,int k)
{
bitree p;
if(k<bt->data)
{
if(bt->lchild=NULL)
{
p=(Bitnode*)malloc(sizeof(Bitnode));
p->data=k;
p->lchild=p->rchild=NULL;
p->lchild=k;
}
else
{
insert_bitree(p->lchild,k);
}
}
else
{
if(bt->rchild=NULL)
{
p=(Bitnode*)malloc(sizeof(Bitnode));
p->data=k;
p->lchild=p->rchild=NULL;
p->rchild=k;
}
else
{
insert_bitree(p->rchild,k);
}
}
return bt;
}
bitree init_bitree()
{
Bitnode *bt;
int a;
bt=(Bitnode*)malloc(sizeof(Bitnode));
printf("请输入数列,并以第一个作为根节点,以回车键结束:\n");
scanf("%d",&a);
bt->data=a;
bt->lchild=NULL;
bt->rchild=NULL;
scanf("%d",&a);
while(a)
{
insert_bitree(bt,a);
scanf("%d",&a);
}
return bt;
}
bitree inorder(bitree bt)
{
if(bt=NULL)
printf("wrong\n");
inorder(bt->lchild);
printf("%d",bt->data);
inorder(bt->rchild);
return bt;
}
int main(void)
{
bitree bt;
int a;
a=0;
bt=init_bitree();
printf("中序遍历后的数列:");
bt=inorder(bt);
return 0;
} 展开
#include<malloc.h>
typedef struct bitnode
{
int data;
struct bitnode *lchild,*rchild;
}Bitnode,*bitree;
bitree insert_bitree(Bitnode *bt,int k)
{
bitree p;
if(k<bt->data)
{
if(bt->lchild=NULL)
{
p=(Bitnode*)malloc(sizeof(Bitnode));
p->data=k;
p->lchild=p->rchild=NULL;
p->lchild=k;
}
else
{
insert_bitree(p->lchild,k);
}
}
else
{
if(bt->rchild=NULL)
{
p=(Bitnode*)malloc(sizeof(Bitnode));
p->data=k;
p->lchild=p->rchild=NULL;
p->rchild=k;
}
else
{
insert_bitree(p->rchild,k);
}
}
return bt;
}
bitree init_bitree()
{
Bitnode *bt;
int a;
bt=(Bitnode*)malloc(sizeof(Bitnode));
printf("请输入数列,并以第一个作为根节点,以回车键结束:\n");
scanf("%d",&a);
bt->data=a;
bt->lchild=NULL;
bt->rchild=NULL;
scanf("%d",&a);
while(a)
{
insert_bitree(bt,a);
scanf("%d",&a);
}
return bt;
}
bitree inorder(bitree bt)
{
if(bt=NULL)
printf("wrong\n");
inorder(bt->lchild);
printf("%d",bt->data);
inorder(bt->rchild);
return bt;
}
int main(void)
{
bitree bt;
int a;
a=0;
bt=init_bitree();
printf("中序遍历后的数列:");
bt=inorder(bt);
return 0;
} 展开
1个回答
展开全部
if(k<bt->data)
{
if(bt->lchild=NULL)
{
p=(Bitnode*)malloc(sizeof(Bitnode));
p->data=k;
p->lchild=p->rchild=NULL;
p->lchild=k; // p->lchild->data=k; 两边的数据类型要一致哦
}
else
{
insert_bitree(p->lchild,k);
}
}
else
{
if(bt->rchild=NULL)
{
p=(Bitnode*)malloc(sizeof(Bitnode));
p->data=k;
p->lchild=p->rchild=NULL;
p->rchild=k; // p->rchild->data=k; 这个也是
}
运行了会导致堆栈溢出,思路有问题吧,另外用malloc申请内存 还要 free
{
if(bt->lchild=NULL)
{
p=(Bitnode*)malloc(sizeof(Bitnode));
p->data=k;
p->lchild=p->rchild=NULL;
p->lchild=k; // p->lchild->data=k; 两边的数据类型要一致哦
}
else
{
insert_bitree(p->lchild,k);
}
}
else
{
if(bt->rchild=NULL)
{
p=(Bitnode*)malloc(sizeof(Bitnode));
p->data=k;
p->lchild=p->rchild=NULL;
p->rchild=k; // p->rchild->data=k; 这个也是
}
运行了会导致堆栈溢出,思路有问题吧,另外用malloc申请内存 还要 free
追问
remalloc吗?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询