Другая проблема с рекурсией, извините, просто не могу опустить голову. Я пытаюсь вернуть указатель узла, чей идентификатор соответствует указанному идентификатору. Кажется, я правильно обхожу дерево. Любые идеи, в которых я ошибаюсь?Возврат значения из рекурсивной функции
//h
Node* findNode(const QString &id, Node *node=NULL)
//cpp
Node* Tree::findNode(const QString &id, Node *node)
{
if (node == NULL)
node = root;
for(int i = 0, end = node ? node->childCount() : -1; i < end ; i++)
{
QString nodeId = node->child(i)->id();
if (nodeId == id)
{
return node;
}
else
{
return findNode(id, node->child(i));
}
}
}
Спасибо для смотреть
Спасибо всем. Маты, в предложении else идентификатор узла не соответствует желаемому идентификатору, поэтому зачем мне возвращать узел? – dogsbollocks
'return temp;' заключается в замене 'return findNode (...)' - это означает, что вы нашли то, что ищете в дочернем узле. Очевидно, что если 'temp' является NULL, вам нужно продолжать искать. В вашем исходном коде вы всегда возвращались в этот момент, поэтому вы никогда не смотрели на все узлы определенного уровня, что явно неверно. Но вы не хотите продолжать искать, если вы что-то нашли, поэтому вернитесь, если у вас есть. –