簡體   English   中英

二叉樹運行時錯誤的后置迭代遍歷

[英]Postorder Iterative Traversal of Binary Tree Run Time Error

我正在做一些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) {

更正的代碼:附加檢查是否要在堆棧中的空白處添加檢查

    #include<iostream>
    #include<vector>
    #include<stack>
    using namespace std;
     class TreeNode{public:
     int val;
     TreeNode *left;
     TreeNode *right;
     TreeNode(){
      left=right=NULL;
           }
       TreeNode(int data){
          val=data;
              }
         };
       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.empty() && s.top() == temp->right) {
            s.pop(); 
            s.push(temp); 
            temp = temp->right;                 

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

    }
      };
       int main(){
       TreeNode* root = NULL; 
        root = new TreeNode(1); 
        root->left = new TreeNode(2); 
         root->right = new TreeNode(3); 
       root->left->left = new TreeNode(4); 
       root->left->right = new TreeNode(5); 
         root->right->left = new TreeNode(6); 
         root->right->right = new TreeNode(7); 
        Solution obj;
         vector<int >v;
        v =obj.postorderTraversal(root);
        for(auto i=v.begin();i!=v.end();++i)
        cout<<*i;

    }

輸出:4526731

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM