[英]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.