我正在做一些LeetCode问题(在LeetCode上是新问题),并且我写了一个迭代遍历二叉树的解决方案。我使用了一个堆栈,并且我相信我的逻辑可以工作,但是LeetCode给了我一个运行时错误。我怎样才能解决这个问题?

这是我的代码:

class Solution {
public:
    vector<int> postorderTraversal(TreeNode* root) {
        TreeNode* temp = root;
        vector<int> v;
        stack<TreeNode*> s;

        if (temp == NULL)
            return v;
        while (true){
            while (temp != NULL){
                if (temp->right)
                    s.push(temp->right);
                s.push(temp);
                temp = temp->left;

            }
            if (s.empty())
                break;
            temp = s.top();
            s.pop();
            if (s.top() == temp->right){
                s.pop();
                s.push(temp);
                temp = temp->right;

            }else{
                v.push_back(temp->val);
                temp = NULL;
            }
        }
        return v;

    }
};

请帮忙,谢谢!

最佳答案

当堆栈中仅剩一个项目时,代码将在此处崩溃:

temp = s.top();               // remove the last item from the stack
s.pop();                      // empty the stack
if (s.top() == temp->right){  // attempt to access the top of the stack.. boom!

解决方法是在检查top之前测试是否为空堆栈:
if (!s.empty() && s.top() == temp->right) {

关于c++ - 二叉树运行时错误的后置迭代遍历,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52922239/

10-12 04:11