注册 登录
编程论坛 数据结构与算法

数据结构二叉树(c语言版)

TRUTH_2015 发布于 2015-06-11 18:45, 2219 次点击
#include<stdio.h>
#include<malloc.h>
typedef int elemtype;
typedef struct BiTNode
{
 elemtype data;
 struct BiTNode *lchild,*rchild;
}BiTNode;

void creatBiTree(BiTNode *T)
{
    elemtype ch;
    scanf("%d",&ch);
 if(ch==0)
     T=NULL;
 else
 {
  T=(BiTNode *)malloc(sizeof(BiTNode));
  T->data=ch;
  creatBiTree(T->lchild);
  creatBiTree(T->rchild);
 }
}

void vist(elemtype e)//输出函数
{
 printf("%3d",e);
}

void preorder(BiTNode *T)
{
   
    if(T!=NULL)
    {   
        vist(T->data);
        preorder(T->lchild);
        preorder(T->rchild);
    }
}


void main()
{
 BiTNode *A;
 creatBiTree(A);
 preorder(A);

}
在此题中creatBiTree()函数的操作的结果不能传给preorder()函数来运用
使程序运行失败,应该怎么传递。
求指点。
4 回复
#2
TRUTH_20152015-06-11 19:06
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
#3
林月儿2015-06-11 19:45
程序代码:
void creatBiTree(BiTNode *T)
{
    elemtype ch;
    scanf("%d",&ch);
if(ch==0)
     T=NULL;
else
{
  T=(BiTNode *)malloc(sizeof(BiTNode));
  T->data=ch;
  creatBiTree(T->lchild);
  creatBiTree(T->rchild);
}
}

递归部分,隐藏了循环,也遗忘了为新结点申请内存
只能一遍遍的抛出那解决不了的异常
#4
TRUTH_20152015-06-12 14:12
回复 3楼 林月儿
只有本站会员才能查看附件,请 登录

这是严蔚敏《数据结构》书上的代码啊!
#5
TRUTH_20152015-06-12 14:17
T=(BiTNode *)malloc(sizeof(BiTNode));
这一步不就是对内存的申请吗?  creatBiTree(T->lchild)不是实现了节点的链接吗?
不懂求指点,谢谢!
1