增加递归函数

lis*_*olm 0 c++ recursion

在处理树处理问题的同时,我对于存储已观察到某个模式的实例数的最佳方法感到困惑.

例如,假设我想返回二进制搜索树中的数字的次数可被2整除.我将递归地遍历树,检查每个键是否可被2整除,并递增计数器.

现在,我可以考虑存储这个计数器的唯一方法是参考.例如:

DivByTwo(node, counter) {
    DivByTwo(node.left, counter)
    DivByTwo(node.right, counter)

    if (node.key % 2 == 0) 
      counter ++
}
Run Code Online (Sandbox Code Playgroud)

完成此操作后,计数器的值将是可被2整除的键的数量.这是解决此问题的正确方法吗?有没有更好的方法来捕获这些数据而不强迫用户通过引用传递一些变量?

小智 5

这是一种避免传递ref参数的方法,虽然它需要能够返回一个值(你不包含任何类型信息,所以我对你的类型做了最好的猜测):

int DivByTwo(NodeType node){
    int result = DivByTwo(node.left) + DivByTwo(node.right);
    if(node.key % 2 == 0)
        result += 1;
    return result;
}
Run Code Online (Sandbox Code Playgroud)