没有什么大问题 你可以在getchar()那个语句后加上一句fflush(stdin)将输入缓冲区中'\n'清空掉 这样就不会读入\n了 因为之前\n总是会被读入 所以当输入一个^符号 使得将一个节点的左孩子置为NULL时 其右孩子总是读入\n作为自己的值 所以这样下去是无法结束输入的
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; }
Quote: 引用 4 楼 gongheguoyingpai11 的回复: 没有什么大问题 你可以在getchar()那个语句后加上一句fflush(stdin)将输入缓冲区中'\n'清空掉 这样就不会读入\n了 因为之前\n总是会被读入 所以当输入一个^符号 使得将一个节点的左孩子置为NULL时 其右孩子总是读入\n作为自己的值 所以这样下去是无法结束输入的 a=getchar(); fflush(stdin); 修改后,输入结束后,按回车时,依旧把回车作为字符处理,一直按回车都没反应,一直换行.......
Quote: 引用 5 楼 u010412073 的回复: Quote: 引用 4 楼 gongheguoyingpai11 的回复: 没有什么大问题 你可以在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; }
楼主这样输入12^3^^4^^然后敲回车,注意字符之间没有空格也没有回车.测试过可以运行,仅供参考。 lz是前序创建二叉树,注意树的结构。