C中二叉树中数字的总结

Summary of numbers inside binary tree in C

我正在尝试创建一个函数,该函数 returns 二叉树中 10 个数字的汇总,例如,如果用户输入 1,2,3,4,5,6,7,8 ,9 and 10 this function returns 55. 该函数可以使用递归也可以不使用。

我尝试了不同的方法,但该功能不起作用,这是我尝试过的方法。

int sumTree(Node* tree, int n)
{
  if(tree != NULL)
  {
    int temp= tree->num;
    return sumTree(tree->left , n + temp);
    return sumTree(tree->right , n + temp);
  } else {
    return 0;
  }
}

节点结构如下

typedef struct node {
  int num;
  struct node *left;
  struct node *right;
} Node ;

您有两个 return 语句,一个接一个。 return 立即从函数中 returns ,所以 return sumTree(tree->right , n + temp); 永远不会达到(如果编译器决定完全删除这一行,我不会感到惊讶)。

您想将子树的值添加到 temp(当前节点值)。所以 return 你需要的语句是:

return temp + sumTree(tree->left , n + temp) + sumTree(tree->right , n + temp);

但让我们更进一步。函数的第二个参数在这种情况下没有用,删除它。让我们直接使用它,而不是创建临时变量。

Summa summarum,函数应如下所示:

int sumTree(Node* tree)
{
    if (tree != NULL) {
        return tree->num + sumTree(tree->left) + sumTree(tree->right);
    } else {
        return 0;
    }
}

使用条件运算符,一行即可完成

int sumTree(Node* tree)
{
    return tree != NULL ? tree->num + sumTree(tree->left) + sumTree(tree->right) : 0;
}

但我实际上不会推荐它。