У меня почти работает мой код, но по какой-то причине он фактически не принимает значения каждого узла и не добавляет их. Вместо этого вывод для суммы равен 0 каждый раз. Я думал, что линия sum = sum + data в методе btreeSumRange позаботится об этом. Любая идея, как это исправить?Печать Суммы в пределах диапазона для двоичного дерева поиска
#include <stdio.h>
#include <stdlib.h>
static long long sum;
typedef struct node
{
long long data;
struct node *left;
struct node *right;
} node;
node * btreeInsert(node *node,long long data)
{
if(node==NULL)
{
struct node *temp;
temp = (struct node *)malloc(sizeof(node));
temp -> data = data;
temp -> left = temp -> right = NULL;
return temp;
}
if(data >(node->data))
{
node->right = btreeInsert(node->right,data);
}
else if(data < (node->data))
{
node->left = btreeInsert(node->left,data);
}
return node;
}
void btreeSumRange(node *tree, long long min,long long max) {
if (tree == NULL) {
return;
}
btreeSumRange(tree->left, min, max);
long long data= tree->data;
if((data>=min)&&(data<=max)){
sum = sum + data;
}
btreeSumRange(tree->right, min, max);
}
int main() {
node *root;
long long value;
root = NULL;
FILE* data = fopen ("dataA", "r");
FILE* range = fopen ("rangeA", "r");
while(fscanf(data, "%lld\n", &value) != EOF){
printf("%lld\n", value);
btreeInsert(root, value);
}
long long min;
long long max;
while(fscanf(range, "%lld %lld\n", &min, &max) != EOF){
btreeSumRange(root, min, max);
printf("Range [%lld,%lld]. Sum = %lld. \n", min, max, sum);
}
return 0;
}