我写的一个用先序输入创建二叉树,然后用后序遍历二叉树的代码。结果创建成功,却在遍历时,说内存有问题。
发布网友
发布时间:2022-05-24 09:29
我来回答
共1个回答
热心网友
时间:2023-10-09 21:58
楼主掉入了指针传值陷阱。
createabitree(bitree *t)虽然传入的是指针,但指针变量本身也是传值进来的,即当函数返回时,原来的指针不改变。例如:
bitree* p=NULL;
createabitree(p);
结束后指针p仍然是NULL;
有两种改法。
1. 用指针的指针
bitree* createabitree(bitree **t)
{
char c;
scanf("%c",&c);
if(c==' ') *t=NULL;
else
{*t=(bitree*)malloc(sizeof(bitree));
(*t)->data=c;
createabitree(&(*t)->left);
createabitree(&(*t)->right);
}
return *t;
}
main()
{
bitree *a,*b;
createabitree(&a);
postorder(a);
deletetree(a); /*楼主应该加这个函数释放内存*/
}
2. 利用返回值
bitree* createabitree(bitree *t)
{char c;
scanf("%c",&c);
if(c==' ') t=NULL;
else
{t=(bitree*)malloc(sizeof(bitree));
t->data=c;
t->left = createabitree(t->left);
t->right = createabitree(t->right);
}
return t;
}
main()
{bitree *a,*b;
a = createabitree(a);
postorder(a);
deletetree(a); /*楼主应该加这个函数释放内存*/
}