C++ 二叉树运行时错误的后序迭代遍历
我在做一些LeetCode问题(LeetCode的新问题),并编写了一个迭代遍历二叉树的解决方案。我使用了一个堆栈,我相信我的逻辑是有效的,但是LeetCode给了我一个运行时错误。我怎样才能解决这个问题 这是我的密码:C++ 二叉树运行时错误的后序迭代遍历,c++,iteration,traversal,postorder,C++,Iteration,Traversal,Postorder,我在做一些LeetCode问题(LeetCode的新问题),并编写了一个迭代遍历二叉树的解决方案。我使用了一个堆栈,我相信我的逻辑是有效的,但是LeetCode给了我一个运行时错误。我怎样才能解决这个问题 这是我的密码: class Solution { public: vector<int> postorderTraversal(TreeNode* root) { TreeNode* temp = root; vector<int&g
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;
}
};
类解决方案{
公众:
向量postorderTraversal(TreeNode*根){
树节点*温度=根节点;
向量v;
堆栈s;
if(temp==NULL)
返回v;
while(true){
while(temp!=NULL){
如果(临时->右侧)
s、 按下(温度->右侧);
s、 推动(温度);
温度=温度->左侧;
}
如果(s.empty())
打破
温度=s.顶部();
s、 pop();
如果(s.top()==temp->right){
s、 pop();
s、 推动(温度);
温度=温度->右侧;
}否则{
v、 向后推(温度->值);
温度=零;
}
}
返回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;
}
#包括
#包括
#包括
使用名称空间std;
类TreeNode{public:
int-val;
TreeNode*左;
TreeNode*对;
TreeNode(){
左=右=空;
}
树节点(整数数据){
val=数据;
}
};
类解决方案{
公众:
向量postorderTraversal(TreeNode*根)
{
树节点*温度=根节点;
向量v;
堆栈s;
if(temp==NULL)
返回v;
while(true){
while(temp!=NULL){
如果(临时->右侧)
s、 按下(温度->右侧);
s、 推动(温度);
温度=温度->左侧;
}
如果(s.empty())
打破
温度=s.顶部();
s、 pop();
如果(!s.empty()&&s.top()==temp->right){
s、 pop();
s、 推动(温度);
温度=温度->右侧;
}否则{
v、 向后推(温度->值);
温度=零;
}
}
返回v;
}
};
int main(){
TreeNode*root=NULL;
根=新树节点(1);
根->左=新树节点(2);
根->右=新树节点(3);
根->左->左=新树节点(4);
根->左->右=新树节点(5);
根->右->左=新树节点(6);
根->右->右=新树节点(7);
溶液obj;
向量;
v=对象postorderTraversal(根);
对于(自动i=v.begin();i!=v.end();++i)
cout@albusSimba他要求的是迭代方法,而不是递归方法我正在编辑我的comment@GaneshChowdharySadanala已编辑!但无法解决运行时问题error@Ruby我只是问了更多关于方法的信息,而不是解决问题的方法it@Ruby查看下面我的代码,别忘了接受它,这让我们继续前进