首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2013-06-25 
二叉树的初始化和遍历,内存操作错误,求指教!!!#includestdio.h#includestdlib.htypedef int Telemtype

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

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

热点排行