首页 新闻 会员 周边

求大神指点,为什么这个创建二叉树的程序总是运行出错呢?linux下显示”段错误“

0
悬赏园豆:5 [待解决问题]

第一个是头文件:BiTree.h,定义的创建和打印二叉树的函数

#ifndef BITREE_H
#define BITREE_H

#include<stdio.h>
#include<stdlib.h>

typedef char ElementType;
typedef struct treenode
{
    ElementType data;
    struct treenode *leftchild;
    struct treenode *rightchild;
} TreeNode;

/*使用先序遍历创建二叉树*/
void create_bitree(TreeNode *T)
{
    ElementType ch;

    scanf(" %c",&ch);
    if(ch!='#')
    {
        T=(TreeNode*)malloc(sizeof(TreeNode));
        T->data=ch;
        create_bitree(T->leftchild);
        create_bitree(T->rightchild);
    }
    else
    {
        T=NULL;
    }
}


/*先序遍历*/
void pre_order_traversal(TreeNode *T)
{
    ElementType data;
    if(T!=NULL)
    {
        data=T->data;
        printf("%d ",data);
        pre_order_traversal(T->leftchild);
        pre_order_traversal(T->rightchild);
    }
}

#endif

第二个是主函数:main.c

#include<stdio.h>
#include"BiTree.h"

int main()
{
    TreeNode *T;
    T=NULL;

    printf("type the binary tree with previous order:");
    create_bitree(T);
    pre_order_traversal(T);

    return 0;
}

那个 打印二叉树的函数,我验证过没有问题。我想是不是scanf的问题?

xmkk的主页 xmkk | 初学一级 | 园豆:116
提问于:2013-09-04 14:00
< >
分享
所有回答(1)
0

scanf(" %c",&ch);这一句里面的" %c"怎么有个空格?加了空格,输入的时候就要输入空格,不然会出错,这语句完全可以用ch = getchar();代替scanf();通过单步调试慢慢试,监视关键变量,就可以哪里出错了.

大卫david | 园豆:240 (菜鸟二级) | 2013-09-04 22:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册