创建二叉树出问题,求各位大侠帮忙看看! #include <stdio.h> #include <malloc.h> typedef char Elemtype

#include <stdio.h>
#include <malloc.h>
typedef char Elemtype;
typedef int status;
//二叉树的存储表示
typedef struct node
{ Elemtype data;
struct node *lchild,*rchild;
}*Bitree,BiTNode;
void CreateBiTree (Bitree T) //按先序遍历次序输入结点的值
{ Elemtype ch;
scanf("%c",&ch);
if(ch=='/') T=NULL;
else
{ if(T=(BiTNode *)malloc(sizeof(BiTNode)))
T->data=ch;
CreateBiTree (T->lchild);
CreateBiTree (T->rchild);
}
}
void PreOrderTraverse(Bitree T)
{ if(T)
{printf("%c ",T->data); PreOrderTraverse(T->lchild);PreOrderTraverse(T->rchild);
}}
void InOrderTraverse(Bitree T)
{ if(T)
{ InOrderTraverse(T->lchild); printf("%c ",T->data) ;InOrderTraverse(T->rchild);
}
}
void PostOrderTraverse(Bitree T)
{ if(T!=NULL)
{ PostOrderTraverse(T->lchild);PostOrderTraverse(T->rchild);printf("%c ",T->data);
}
}
void main()
{ Bitree T;
CreateBiTree(T);PreOrderTraverse(T);InOrderTraverse(T); PostOrderTraverse(T);
}

第1个回答  2011-05-02
在CreateBitTree时传入参数时,如果传入的是Bitree,那就要确保其非NULL。
如果可能传入NULL(按照你的代码,可以肯定是传入NULL),并在CreateBitTree里分配内存,必须传入一个Bitree的指针或引用。否则你分配的新节点将仅仅被当前形参T所指向,而不被父节点的lchild或者rchild指向。

简单地修改是,将CreateBiTree (Bitree T) 改成CreateBiTree (Bitree &T)
如果是纯C,那么改成CreateBiTree (Bitree *T)然后函数体中用到T的都改成(*T)
相似回答