代码1:
typedef struct Node{
char data;
struct Node * LChild;
struct Node * RChild;
}BiTNode,*BiTree;
//
void CreateBiTree(BiTree * bt){
char ch;
ch=getchar();
if(ch=='.'){
*bt=NULL;
}
else{
*bt=(BiTree)malloc(sizeof(BiTNode));
(*bt)->data=ch;
CreateBiTree(&(*bt)->LChild);
CreateBiTree(&(*bt)->RChild);
}
}
void main(){
BiTree b;
CreateBiTree(BiTree &b)
}
代码2:
typedef struct Node{
char data;
struct Node * LChild;
struct Node * RChild;
}BiTNode,*BiTree;
//
void CreateBiTree(BiTree bt){
char ch;
ch=getchar();
if(ch=='.'){
bt=NULL;
}
else{
bt=(BiTree)malloc(sizeof(BiTNode));
bt->data=ch;
CreateBiTree(bt->LChild);
CreateBiTree(bt->RChild);
}
}
void main(){
BiTree b;
CreateBiTree(BiTree b)
}
问题:1.代码一是正确的操作,请问代码二错在哪了?(通过代码二创建的二叉树,若调用遍历函数会直接出错,调试时发现代码二创建的树的data,LChild,RChild内存中是未知数据)
2.&(*bt)是否等价于bt? 为什么?按我的理解&和*相遇应该可以抵消吧..
注意函数在传参的时候一律是复制的,指针传入的时候,复制的是指针变量,形参和实参的指针变量是两个不同的变量,只是指向同一块区域而已。
CreateBiTree
明显是在函数内申请内存,并赋值给形参,那么形参指针必然要升一级
,否则在函数内申请的内存是由函数的形参指向的,实参并没有发生变化,而且导致内存泄漏。