读书人

二叉树的初始化和遍历内存操作异常

发布时间: 2013-06-25 23:45:41 作者: rapoo

二叉树的初始化和遍历,内存操作错误,求指教!!!

#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。

读书人网 >C语言

热点推荐