发布网友 发布时间:2022-04-22 07:52
共4个回答
热心网友 时间:2022-06-18 02:39
“这个函数的参数visit应该是另一个函数的地址是把,但我怎么感觉不管怎么递归它只是在访问根的时候被调用过一次”
首先,你是对的,visit确实是一个指向函数的指针;
然后,它只是在访问根的时候被调用过一次,这种说法就很片面了。
我觉得应该这么说:(*visit)()函数在BTreePreOrger()函数的一次执行过程中只被调用过一次,但是BTreePreOrger()函数执行了很多次,因此(*visit)()就被调用了n次(假设该树有n个节点)
热心网友 时间:2022-06-18 02:40
1.其实visit这个函数和外层递归没有必然的联系,这个visit就相当于,嵌套到递归函数中的一些语句,例如:cout<<root->data<<endl;之类的。
2.其实进行递归调用的还是BTreePreOrger这个函数。
3.以前我也没见过这种传递函数指针的递归函数。(孤陋寡闻了),但是我考虑这个递归函数传递函数指针的用意就是希望,能仅仅通过改变指针指向的函数内容,就能改变这个前序遍历对这个树的节点的操作(可以是输出,可以是修改节点的值等等)。而不用做一个个修改函数名之类的操作。
热心网友 时间:2022-06-18 02:40
递归题目本来就不好说,靠自己脑子模拟计算机运算过程,
这个函数运行到 BTreePreOrder(root->lchild,visit);时把根的左子树地址和visit函数地址作为实参传给 BTreePreOrger函数,再运行到BTreePreOrger
里面调用(*visit)(root->data); (*visit)()这个函数就是从前面传地址传过来的,也就像你说的地址被传来传去,其实也是visit()这个函数被传来传去,我说的可能不是很好,你自己多琢磨应该会相同的,
热心网友 时间:2022-06-18 02:41
这个是循环调用,你去看一下递归的那章吧。是利用栈实现的。