ожидаемый неквалифицированный идентификатор перед токеном ‘->

Я пытаюсь сделать b-дерево из массива, и я придумал этот код, но он не компилируется и выдает мне эту ошибку:
«ожидаемый безусловный идентификатор перед токеном‘ -> »в строке 42:

node-> balance = right_height — left_height;

Вот полный код:

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cmath>

struct node {
node *left;
node *right;
int balance;
int value;
};

node *build_subtree(int *items, int length, void* node_mem, int *height = NULL) {
/*This will give either the middle node or immediately to the right.*/
int root_index = length / 2;

/* Make the node. It will be at the same index in its
memory block as its value. Who needs memory management? */
node *root = (node*)((char*)node_mem + sizeof(node) * root_index);
root->value = *(items + root_index);

/* These values will be used to compute the node balance */
int left_height = 0, right_height = 0;

/* Build the left subtree */
if (root_index > 0) {
root->left = build_subtree(items,
root_index,
node_mem,
&left_height);
}

/* Build the right subtree */
if (root_index < length - 1) {
root->right = build_subtree(items, root_index,
(char*)node_mem + sizeof(node) * root_index,
&right_height);
}

/* Compute the balance and height of the node.
The height is 1 + the greater of the subtrees' heights. */
node->balance = right_height - left_height;
if (height) {
*height = (left_height > right_height ? left_height : right_height) + 1;
}

return root;
}

int main() {
int values[10000000];

for (int i=1; i<=10000000; i++)
values[i] = i;

void *mem = malloc(sizeof(node) * 10000000);
memset(mem, 0, sizeof(node) * 10000000);

node *root = build_subtree(values, 10000000, mem);
}

Пожалуйста, помогите D:

-3

Решение

node это тип, а не имя указателя. Так node->balance не является синтаксически правильным.

2

Другие решения