как остановить функцию void от переполнения стека

Поскольку void ничего не возвращает, я не знаю, как получить правильный базовый вариант для функции void, такой как та, которую я пытаюсь получить.

struct TreeNode {
char value;
TreeNode *sibling;
TreeNode *child;
};

void serialize(std::ostream &out, TreeNode *root)
{
// If the root is nullptr, print "None"if (root == nullptr)
out << "None" << "\n";

// Write out root's value
out << root->value << "\n";

// if there is no child
//    write out "False"// else
//    write out "True"//    recursively call serialize on that child
if (root->child == nullptr)
out << false << "\n";
else
{
out << true << "\n";
serialize(out, root->child);
}
// recursively call serialize on the sibling
serialize(out, root->sibling);
}

Поможет ли мне, если я перезапишу сериализацию как функцию типа TreeNode, каков будет мой базовый случай, если я это сделаю?

Примечание: это одна из функций проекта для создания структуры данных узла дерева в c ++.

-1

Решение

В этом коде вы пытаетесь рекурсивно вызвать функцию сериализации, но условие завершения не указано. следовательно, в результате чего каждый раз при рекурсивном вызове функции стек памяти занят, что в конечном итоге приводит к переполнению стека. Добавьте точку завершения, такую ​​как оператор возврата, она должна работать нормально.

 if (root == nullptr)
out << "None" << "\n";
return;
    
-2

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

Других решений пока нет …

По вопросам рекламы [email protected]