发布网友 发布时间:2022-04-24 05:54
共2个回答
热心网友 时间:2023-10-03 15:00
传值调用啊。void CreatePre(BitTree T),不会修改T的值,void main()里将&T传递进去不会改变BitNode T在内存中位置,只是改变了复制进去的指针((CreatePre局部变量)BitTree T=&(main局部变量)T)的值;递归CreatePre(T->lchild);也不会写入T->lchild。
正解:
void CreatePre(BitTree* T)
{
……
if(' '==ch) *T=NULL;
else
{
if(!(*T=……
(*T)->data=ch;
CreatePre(&((*T)->lchild));
CreatePre(&((*T)->rchild));
}
……
}
int main()
{
BitTree T;
CreatePre(&T);
PreTrave(T);
return 0;
}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
抱歉前面我也犯了些错误,二级指针是容易晕的,修改好了。
测试示例:
输入:abc空空d空空ef空g空空h空空回车——摆渡居然消我的空格!
输出:abcdefgh
脑子里不要总是形参实参的,那是文科的东西。参数传递,就相当于在函数的开头定义了这么些个变量并初始化为传入的东西。
像你原来那样“(CreatePre局部变量)BitTree T=&(main局部变量)T”,函数取得了“(main局部变量)T”的地址的值,能修改T,但不能修改这个地址本身;而我这样传入了T(BitTree类型)的地址,就可以向T所在那个地方写入。
热心网友 时间:2023-10-03 15:01
天啊,以前我就是做这个东西搞了我好长一段时间,
那个能编译,结果出不来,很正常,当时我们做的时候百分之九十的同学都是这样子。至于是怎么搞定的,我也不算懂。
先说一下怎么停下来吧,
你是不是一直在输入,但不知道怎么停?
这里你首先了解这个程序是根据一个二叉树进行输入的,左右子树的地方按你的程序是输入空格的。你画一个简单的二叉枝,然后根据这树进行输入。先根输入,遇到没有子树的地方就输入一个空格。