c - 二叉树:关于生成二叉树的函数的问题
本文介绍了c - 二叉树:关于生成二叉树的函数的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
代码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
明显是在函数内申请内存,并赋值给形参,那么形参指针必然要升一级
,否则在函数内申请的内存是由函数的形参指向的,实参并没有发生变化,而且导致内存泄漏。
这篇关于c - 二叉树:关于生成二叉树的函数的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文