Ошибка переполнения стека в задаче Leetcode 'Inorder Tree Traversal' - PullRequest
0 голосов
/ 12 октября 2019

Я пытаюсь решить проблему 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 выдает ошибку (выделено в приведенном выше коде). Для меня линия выглядит нормально, но мне кажется, что-то здесь не хватает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...