В отличие от Алексис, я не вижу ничего прямо здесь на этом уровне алгоритма, но я не уверен, что вы пропускаете детали или запутались.
for (i=0; i<4; i++){ // I think you mean 5 here -- or rather MAXCHILDREN.
node newNode; // This is a temporary on the stack.
newNode.id=i;
addChild(&newNode, &Root); // &newNode is a pointer to that temporary.
}
Таким образом, addChild каждый раз получает указатель на временный новый узел. Это произойдет по одному адресу в стеке, поэтому все они будут указывать на одно и то же место. Таким образом, они все будут иметь одинаковый идентификатор. Возможно, к тому времени это расположение стека было перезаписано, поэтому оно может быть совершенно случайным.
for (i=0; i<MAXCHILDREN; i++){
node *newNode = new node(); // C++, or use malloc if you're stuck in C
newNode->id=i;
addChild(newNode, &Root);
}
Должен приблизить вас к тому, что вы хотите сделать.