先序遍历只能输出头一个字母

来源:百度知道 编辑:UC知道 时间:2024/06/11 19:23:36
#include<stdio.h>
#include<malloc.h>
struct BiTree
{
int data;
struct BiTree *lchild;
struct BiTree *rchild;
};

BiTree * CreateBiTree(BiTree *T)
{
char ch=NULL;
scanf("%c",&ch);
if(ch=='#')
T=NULL;

else
{
T=(BiTree *)malloc(sizeof(BiTree));
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return T;

}
void preorder(BiTree *T)
{ if (T!=NULL)
printf("%c",T->data);
preorder(T->lchild);
preorder(T->rchild);

}
void main( )
{
BiTree * T;
printf("按先序序列输入结点\n");
preorder(CreateBiTree(T)

你的CreateBiTree的参数有问题。这里需要的是BiTree的指针的引用,而不是指针本身。 你可以用1234##5###67##8##测试一下。
#include<stdio.h>
#include<malloc.h>

typedef struct BiTree
{
int data;
struct BiTree *lchild;
struct BiTree *rchild;
}BiTree, *pBiTree;

BiTree* CreateBiTree( pBiTree &T )
{
char ch=NULL;
scanf("%c",&ch);
if(ch=='#')
T=NULL;
else
{
T=(BiTree*)malloc(sizeof(BiTree));
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return T;
}
void preorder(BiTree *T)
{
if (T!=NULL)
{
printf("%c",T->data);

preorder(T->lchild);
preorder(T->rchild);
}
}
void main( )
{
BiTree *T;
printf("按先序序列输入结点\n");

preorder( CreateBiTree( T ) );
printf("\n");
}