我怀疑你想要这样的东西:
size_t displayAscend(nodePtr p, int count)
{
size_t additional_count = 0;
if (p->left != NULL)
additional_count += displayAscend(p->left, count + additional_count);
cout << count + additional_count << ". " << p->acctNum << endl;
additional_count++;
if (p->right != NULL)
additional_count += displayAscend(p->right, count + additional_count);
return additional_count;
}
如果您愿意,可以使用int
代替。size_t
原因是每个递归调用都必须向其调用者返回一个计数,否则调用者无法知道递归调用计数了多少。当然,最外面的调用者如果不感兴趣,可以丢弃计数。
正如另一个答案所观察到的,通过引用传递是另一种方式,尽管不是我喜欢的方式。(我个人更喜欢使用显式指针来实现该策略。)
你问制作count
一个全局变量是否可行。答案是,是的,它适用于你有限练习的有限目的,但它代表了糟糕的编程实践。毕竟,如果你有几棵树,每棵树都有自己的数量呢?
更新: 感谢@JerryCoffin 指出我的代码中的前一个错误。我已经在上面修复了。更重要的是,我已经用以下方法对其进行了测试:
#include <vector>
#include <iostream>
using std::cout;
using std::endl;
struct node {
node *left;
node *right;
int acctNum;
};
typedef node *nodePtr;
size_t displayAscend(nodePtr p, int count)
{
size_t additional_count = 0;
if (p->left != NULL)
additional_count += displayAscend(p->left, count + additional_count);
cout << count + additional_count << ". " << p->acctNum << endl;
additional_count++;
if (p->right != NULL)
additional_count += displayAscend(p->right, count + additional_count);
return additional_count;
}
int main() {
node head;
node n1;
node n2;
node n11;
node n21;
node n22;
head.left = &n1;
head.right = &n2;
n1 .left = &n11;
n1 .right = 0;
n2 .left = &n21;
n2 .right = &n22;
n11 .left = 0;
n11 .right = 0;
n21 .left = 0;
n21 .right = 0;
n22 .left = 0;
n22 .right = 0;
n11 .acctNum = 100;
n1 .acctNum = 202;
head.acctNum = 300;
n21 .acctNum = 400;
n2 .acctNum = 500;
n22 .acctNum = 600;
displayAscend(&head, 0);
}
输出是
0. 100
1. 202
2. 300
3. 400
4. 500
5. 600
所以,它有效。