Я пытаюсь решить проблему Leetcode 94 'Обход двоичного дерева' с помощью Morris Traversal. Я написал решение проблемы, но в Leetcode он выдает AddressSanitizer: переполнение стека ошибка. Когда я запускаю тот же код на моей локальной машине, он работает нормально. Ниже приведен код -
vector<int> inorderTraversal(TreeNode* root)
{
vector<int> result;
TreeNode* current = root;
while (current != NULL)
{
if (current->left != NULL)
{
TreeNode* temp = current->left;
while (temp->right != NULL && temp->right != current)
temp = temp->right;
if (temp->right == NULL)
{
temp->right = current; /**** Error causing line. ****/
current = current->left;
continue;
}
}
result.push_back(current->val);
current = current->right;
}
return result;
}
Во время отладки я обнаружил, что строка temp->right = current
выдает ошибку (выделено в приведенном выше коде). Для меня линия выглядит нормально, но мне кажется, что-то здесь не хватает.