}btNode,*BiTree;
void CreateBiTree(BiTree *T)
{ DataType ch;
scanf("%c",&ch);
if(ch=='#')
*T=NULL;
else
{ *T=(BiTree )malloc(sizeof(btNode);
if(!(*T))
exit(-1)'
CreateBiTree(&((*T)->lchild));
CreateBiTree(&((*T)->lchild));
}
}
在这个创建二叉树的过程中,结构体定义时BiTree就相当于struct BTNode*。但在函数中
BiTree *T,T前又多了 一个*,那不就成了struct BTNode**T了吗?难道说T是一个结构体二级指针吗?还有在CreateBiTree(&((*T)->lchild))语句中&起什么作用?可以不要吗?哪位大神指教一下。
typedef struct BTNode { datatype data; struct BTNode *lchild; struct BTNode *rchild;
答案:2 悬赏:50 手机版
解决时间 2021-03-02 06:13
- 提问者网友:箛茗
- 2021-03-01 13:40
最佳答案
- 五星知识达人网友:旧脸谱
- 2021-03-01 14:40
C:函数里要想改变指针的值,形参必须是指针的指针(二级以上指针),实参是指针的地址,指针变量;和普通变量,指针常量和普通常量(如 int * const)除了可以改变或获取,所指对象的的值以外,其他和普通的变量,常量没有啥不同。
因为创建函数要为节点(一个一级指针)赋值,所以,必须传入节点的地址(指针的地址)
所以形参必须是二级指针,实参必须是节点的地址(指针的地址)。
C++:还可以,采用引用传递,形参是节点(指针)的引用,实参是节点本身。
CreateBiTree(&((*T)->lchild)); 是递归调用
函数CreateBiTree 是个递归函数.就是直接,或者间接,调用自己的函数。
void CreateBiTree(BiTree *T)
{ DataType ch;
scanf("%c",&ch);
if(ch=='#')
*T=NULL;
else
{ *T=(BiTree )malloc(sizeof(btNode);
if(!(*T))
exit(-1)'
CreateBiTree(&((*T)->lchild));
CreateBiTree(&((*T)->lchild));
CreateBiTree(&((*T)->rchild));
}
}
因为创建函数要为节点(一个一级指针)赋值,所以,必须传入节点的地址(指针的地址)
所以形参必须是二级指针,实参必须是节点的地址(指针的地址)。
C++:还可以,采用引用传递,形参是节点(指针)的引用,实参是节点本身。
CreateBiTree(&((*T)->lchild)); 是递归调用
函数CreateBiTree 是个递归函数.就是直接,或者间接,调用自己的函数。
void CreateBiTree(BiTree *T)
{ DataType ch;
scanf("%c",&ch);
if(ch=='#')
*T=NULL;
else
{ *T=(BiTree )malloc(sizeof(btNode);
if(!(*T))
exit(-1)'
CreateBiTree(&((*T)->lchild));
CreateBiTree(&((*T)->lchild));
CreateBiTree(&((*T)->rchild));
}
}
全部回答
- 1楼网友:不如潦草
- 2021-03-01 15:10
void visit(datatype data)
{
// 对data操作
}
void postorder(bitreptr *t)
{
if (t == null) return;
postorder(t->lchild);
postorder(t->rchild);
visit(t->data); // 这个函数访问data
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯