void create(BTNode *&p)//这里一个引用的指针是什么意思? 要么引用要么指针,很是不理解
//要修改P的内容指针和引用都可以修改啊。。。
{
char a;
a=getchar();
if(a=='^')
p=NULL;
else
{
p=(BTNode *)malloc(sizeof(BTNode));
p->data=a;
create(p->lchild);
create(p->rchild);
}
}
void create(BTNode *&p)//如果说要在函数里面给P申请动态空间,那你也可以传一个指针的指针呀
{
char a;
a=getchar();
if(a=='^')
p=NULL;
else
{
p=(BTNode *)malloc(sizeof(BTNode));
p->data=a;
create(p->lchild);
create(p->rchild);
}
}
#include
#include
#include
typedef struct BTNode//定义结点类型
{
char data;
struct BTNode *lchild;
struct BTNode *rchild;
}BTNode;
char get_char()
{
char a;
scanf("%c",&a);
fflush(stdin);
return a;
}
void create(BTNode *&p,char a)//创建二叉树,输入'^'表示空,这里用了c++的引用,方便修改p
{
if(a=='^')
p=NULL;
else
{
p=(BTNode *)malloc(sizeof(BTNode));
p->data=a;
create(p->lchild,get_char());
create(p->rchild,get_char());
}
}
void output(BTNode *p)//先序输出二叉树的内容
{
if(p)
{
printf("%c\n",p->data);
output(p->lchild);
output(p->rchild);
}
}
int main()//主函数
{
BTNode *p;
printf("please input data:");
create(p,get_char());
printf("pertrave:");
output(p);
return 0;
}
没有什么大问题 你可以在getchar()那个语句后加上一句fflush(stdin)将输入缓冲区中'\n'清空掉 这样就不会读入\n了 因为之前\n总是会被读入 所以当输入一个^符号 使得将一个节点的左孩子置为NULL时 其右孩子总是读入\n作为自己的值 所以这样下去是无法结束输入的
a=getchar();
fflush(stdin);
修改后,输入结束后,按回车时,依旧把回车作为字符处理,一直按回车都没反应,一直换行.......
你一直换行的原因是在等待你输入^,你只设定了^为结束条件
#include
#include
#include
typedef struct BTNode//定义结点类型
{
char data;
struct BTNode *lchild;
struct BTNode *rchild;
}BTNode;
void create(BTNode **p)//创建二叉树,输入'^'表示空
{
char a;
getchar();
scanf("%c",&a);
if(a=='^')
p=NULL;
else
{
*p=(BTNode *)malloc(sizeof(BTNode));
(*p)->data=a;
create(&((*p)->lchild));
create(&((*p)->rchild));
}
return;
}
void output(BTNode *p)//先序输出二叉树的内容
{
if(p)
{
printf("%c\n",p->data);
output(p->lchild);
output(p->rchild);
}
}
int main()//主函数
{
BTNode *p;
printf("please input data:");
create(&p);
output(p);
return 0;
}
#include
#include
#include
typedef struct BTNode//定义结点类型
{
char data;
struct BTNode *lchild;
struct BTNode *rchild;
}BTNode;
void create(BTNode **p)//创建二叉树,输入'^'表示空
{
char a;
getchar();
scanf("%c",&a);
if(a=='^')
p=NULL;
else
{
*p=(BTNode *)malloc(sizeof(BTNode));
(*p)->data=a;
create(&((*p)->lchild));
create(&((*p)->rchild));
}
return;
}
void output(BTNode *p)//先序输出二叉树的内容
{
if(p)
{
printf("%c\n",p->data);
output(p->lchild);
output(p->rchild);
}
}
int main()//主函数
{
BTNode *p;
printf("please input data:");
create(&p);
output(p);
return 0;
}
楼主这样输入12^3^^4^^然后敲回车,注意字符之间没有空格也没有回车.测试过可以运行,仅供参考。
lz是前序创建二叉树,注意树的结构。
#include
#include
#include
typedef struct BTNode//定义结点类型
{
char data;
struct BTNode *lchild;
struct BTNode *rchild;
}BTNode;
void create(BTNode **p)//创建二叉树,输入'^'表示空
{
char a;
getchar();
scanf("%c",&a);
if(a=='^')
p=NULL;
else
{
*p=(BTNode *)malloc(sizeof(BTNode));
(*p)->data=a;
create(&((*p)->lchild));
create(&((*p)->rchild));
}
return;
}
void output(BTNode *p)//先序输出二叉树的内容
{
if(p)
{
printf("%c\n",p->data);
output(p->lchild);
output(p->rchild);
}
}
int main()//主函数
{
BTNode *p;
printf("please input data:");
create(&p);
output(p);
return 0;
}
楼主这样输入12^3^^4^^然后敲回车,注意字符之间没有空格也没有回车.测试过可以运行,仅供参考。
lz是前序创建二叉树,注意树的结构。