Поскольку 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 ++.
В этом коде вы пытаетесь рекурсивно вызвать функцию сериализации, но условие завершения не указано. следовательно, в результате чего каждый раз при рекурсивном вызове функции стек памяти занят, что в конечном итоге приводит к переполнению стека. Добавьте точку завершения, такую как оператор возврата, она должна работать нормально.
if (root == nullptr)
out << "None" << "\n";
return;
Других решений пока нет …