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;
}
但我实际上不会推荐它。
我正在尝试创建一个函数,该函数 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;
}
但我实际上不会推荐它。