帮忙看看我这个二叉树的建立与遍历错在哪了,谢谢大家

来源:百度知道 编辑:UC知道 时间:2024/09/21 15:34:21
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void CreateTree(BiTree T)
{
char ch;
ch=getchar();
if(!(T=(BiTNode*)malloc(sizeof(BiTNode))))
{
printf("Error!");
exit(0);
}
if(ch==',')T=NULL;
else{
T->data=ch;
CreateTree(T->lchild);
CreateTree(T->rchild);
}
}
void PreorderTraverse(BiTree T)//先序
{
if(T!=NULL)
{
printf("%c",T->data);
PreorderTraverse(T->lchild);
PreorderTraverse(T->rchild);
}
}
void main()
{
BiTree T=NULL;
CreateTree(T);
printf("\n");
PreorderTraverse(T);
printf("\n");
getchar();
}
//编译无错误,无警告,就是输入ABC,,DE,G,,F,,,
//建立二叉树后,无法输出结果

你把createtree函数改为下面的就可以了
void CreateTree(BiTree *T)
{
char ch;
ch=getchar();
if(!((*T)=(BiTNode*)malloc(sizeof(BiTNode))))
{
printf("Error!");
exit(0);
}
if(ch==',')(*T)=NULL;
else{
(*T)->data=ch;
CreateTree(&(*T)->lchild);
CreateTree(&(*T)->rchild);
}
}
期间用到了取结点地址赋值,所以会用到双指针