二叉树的初始化和遍历,内存操作错误,求指教!!!
#include<stdio.h>
#include<stdlib.h>
typedef int Telemtype;
typedef struct bitnode
{
Telemtype data;
struct bitnode *lchild,*rchild,*parent;
}bitnode,*bitree;
bitree creat_tree(bitree tree,bitree parent);
void pre_order(bitree tree);
int main(void)
{
bitree root;
root=(bitree)malloc(sizeof(bitnode));
root->parent=NULL;
root=creat_tree(root,root->parent);
pre_order(root);
getchar();
return 0;
}
bitree creat_tree(bitree tree,bitree parent)
{
Telemtype temp;
printf("input the data: \n");
scanf("%d",&temp);
if(temp==0)
{
tree=NULL;
return NULL;
}
else
{
if(!(tree=(bitree)malloc(sizeof(bitnode))))
exit(-1);
tree->data=temp;
tree->parent=parent;
tree->lchild=creat_tree(tree->lchild,tree);
tree->rchild=creat_tree(tree->rchild,tree);
}
return tree;
}
void pre_order(bitree tree)
{
if(tree)
{
printf("%d parent:%d \n",tree->data,tree->parent->data);
pre_order(tree->lchild);
pre_order(tree->rchild);
}
}
编译可以通过,输入数字序列为1 2 3 0 0 4 5 0 6 0 0 7 0 0 0 其中0代表空子树,然后就提示内存操作错误,就是那个0x....内存不能为read窗口,,,请问这段代码有什么问题? 二叉树 内存 遍历
[解决办法]
根节点的parent是空指针,因此执行printf("%d parent:%d \n",tree->data,tree->parent->data)出错。
可改为:
printf("%d parent:%d \n",tree->data,tree->parent? tree->parent->data : -1);
即tree->parent不空时输出tree->parent->data,否则输出-1。