二叉树的建立的问题


为什么输入的输入字符回车后没有反应,就是处于一直输入字符的状态。请问这是怎么回事啊?
如果把字符换成整型,‘#’改为0就可以了。

#include<stdio.h>
#include<malloc.h>
#define NULL 0
#define len sizeof(struct node)
struct node
{
char data;
node *lchild,*rchild;
};
void creat(struct node *&root)
{
         char ch;
scanf("%c",&ch);
if(ch=='#')
root=NULL;
else
{
root=(struct node *)malloc(len);
root->data=ch;
creat(root->lchild);
creat(root->rchild);
}
}

int main()
{
struct node *root;
creat(root);
}
/*A B # D # # C # #*/
/*A B C # # # #*/
/*A # B # C # D # #*/

10 个解决方案

#1


只需要刷新输入流就可以啦!!!!!!!!
#include<stdio.h>
#include<malloc.h>
#define NULL 0
#define len sizeof(struct node)
struct node
{
char data;
node *lchild,*rchild;
};
void creat(struct node *&root)
{
char ch;
scanf("%c",&ch);
fflush(stdin);//刷新输入流
if(ch=='#')
{
root=NULL;
}
else
{
root=(struct node *)malloc(len);
root->data=ch;
printf("please input the left child:");
creat(root->lchild);
printf("please input the right child:");
creat(root->rchild);
}
}

int main()
{
struct node *root;
creat(root);
}
/*A B # D # # C # #*/
/*A B C # # # #*/
/*A # B # C # D # #*/

#2


这是什么原理啊?而且为什么要*&root,这是什么意识,为什么用*root不行

#3



// *&root 为取指针的引用,和一般变量的引用传递没什么区别
//此处若为*root,那么会缠身一个新的局部变量root指针,该root指针的值和你传递进来的值相同。但已经不是你传递进来的root了
//可以使用  **root
void creat(struct node *&root)     
{
  char ch;
scanf("%c",&ch);
if(ch=='#')
root=NULL;
else
{
root=(struct node *)malloc(len);
root->data=ch;
creat(root->lchild);
creat(root->rchild);
}
}

#4


C中没有引用。
你可以使用 **root 代替  *&root

#5


其实不需要用指针引用,传入指针效果是一样的。

#6


引用 5 楼 thegreatone 的回复:
其实不需要用指针引用,传入指针效果是一样的。


这里的形参不能是指针,因为实参已经是指针了。除非使用指针的指针。

#7


引用 6 楼 shexinwei 的回复:
引用 5 楼 thegreatone 的回复:
其实不需要用指针引用,传入指针效果是一样的。


这里的形参不能是指针,因为实参已经是指针了。除非使用指针的指针。

平常不都是指针传指针吗?
比如:void main()
{
     void swap(int *p1,int *p2);
     int a,b;
     int *pointer_1,*pointer_2;
     pointer_1=&a;
     pointer_2=&b;
     swap(pointer_1,pointer_2);
}

void main()
{
void creat(struct node *root);
struct node *root;
creat(root);
}
不也一样吗?为什么非要*&root

#8


引用 7 楼 fzlphzcz 的回复:
平常不都是指针传指针吗?
比如:void main()
{
  void swap(int *p1,int *p2);
  int a,b;
  int *point……

这里不可以。

因为你的实参如果是一个指针,你的形参也是一个指针。
那么结果仅仅是让你的形参的的值等于你实参指针的值。
你分配了一块内存,让形参指向了这块内存,但是实参永远无法指向这块内存。

LZ好好理解一下,当你的形参和实参都为同类型指针,给形参分配一块内存,实参永远无法知道这块内存。

如果还不能够理解,加我QQ:306334649

#9


ls能不能详细讲讲什么时候需要刷新缓冲区,就是用那个flsuh(stdin);

#10


我的测试
智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告