我如何总结奇数节点?C程序

BEX*_*BEX -1 c binary-tree nodes

如何返回树中所有奇数的总和?我必须使用递归来查找总和吗?

这是我的代码:

int sumOdd(BTreeNode *node)
{
    int sum = 0;
    if(node == NULL)
        return 0;
    else{
        if((node->item % 2) != 0)
            return sum = node->item +
                         sumOdd(node->left) +
                         sumOdd(node->right);
    }
    return sum;
}
Run Code Online (Sandbox Code Playgroud)

use*_*738 5

这将是这样的 -

int sumOdd(BTreeNode *node)
{
    int sum = 0;
    if(node != NULL)
    {
        if((node->item % 2) != 0)
            sum += node->item;
        sum+=sumOdd(node->left);
        sum+=sumOdd(node->right);
    }
    return sum;
}
Run Code Online (Sandbox Code Playgroud)
  • 在计算子节点之前,您不需要返回.

  • 你可以用单一方法完成,不需要重写另一个,因为正在解决相同的子问题.

你会这样称呼它

int sum = sumOdd(root);
Run Code Online (Sandbox Code Playgroud)

你也可以修改sum.为此,您需要更改方法以合并int*和传递地址.