C++11 锯齿形水平顺序遍历
我尝试了很多次这个问题,但我不知道我的代码中有什么错误, 请帮我找到这里面的一个bug 问题参考:C++11 锯齿形水平顺序遍历,c++11,binary-tree,C++11,Binary Tree,我尝试了很多次这个问题,但我不知道我的代码中有什么错误, 请帮我找到这里面的一个bug 问题参考: 向量解决方案::之字形levelorder(树节点*根){ 向量vf; 向量v; 如果(A==NULL){ 返回vf; } TreeNode*temp=A; bool-turn=false; 堆栈s1; 堆栈s2; s1.推动(温度); 而(!s1.empty()| |!s2.empty()){ if(turn==false){ 而(!s1.empty()){ TreeNode*节点=s1.to
向量解决方案::之字形levelorder(树节点*根){
向量vf;
向量v;
如果(A==NULL){
返回vf;
}
TreeNode*temp=A;
bool-turn=false;
堆栈s1;
堆栈s2;
s1.推动(温度);
而(!s1.empty()| |!s2.empty()){
if(turn==false){
而(!s1.empty()){
TreeNode*节点=s1.top();
v、 推回(节点->值);
如果(节点->左!=NULL){
s2.推送(节点->左);
}
如果(节点->右侧!=NULL){
s2.推送(节点->右侧);
}
s1.pop();
}
if(s1.empty()){
转身=真;
}
}
else if(turn==true){
而(!s2.empty()){
TreeNode*node=s2.top();
v、 推回(节点->值);
如果(节点->左!=NULL){
s1.推(节点->右);}
如果(节点->右侧!=NULL){
s1.推(节点->左);}
s2.pop();
}
if(s2.empty()){
转向=假;
}
}
vf.推回(v);
v、 清除();
}
返回vf;
}标识符
A
从未声明。如果(节点->左!=NULL){s1.push(节点->右);}
这没有意义。您检查一个指针,但按下另一个指针。
vector<vector<int>> Solution::zigzagLevelOrder(TreeNode* root) {
vector<vector<int>> vf;
vector<int> v;
if(A==NULL){
return vf;
}
TreeNode* temp=A;
bool turn=false;
stack<TreeNode*> s1;
stack<TreeNode*> s2;
s1.push(temp);
while(!s1.empty()||!s2.empty()){
if(turn==false){
while(!s1.empty()){
TreeNode* node=s1.top();
v.push_back(node->val);
if(node->left!=NULL){
s2.push(node->left);
}
if(node->right!=NULL){
s2.push(node->right);
}
s1.pop();
}
if(s1.empty()){
turn=true;
}
}
else if(turn==true){
while(!s2.empty()){
TreeNode* node=s2.top();
v.push_back(node->val);
if(node->left!=NULL){
s1.push(node->right);}
if(node->right!=NULL){
s1.push(node->left);}
s2.pop();
}
if(s2.empty()){
turn=false;
}
}
vf.push_back(v);
v.clear();
}
return vf;