C++11 锯齿形水平顺序遍历

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

我尝试了很多次这个问题,但我不知道我的代码中有什么错误, 请帮我找到这里面的一个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.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;