Leetcode 103二叉树的锯齿形层次遍历 C++

思路:用两个stack来隔层存储节点。

class Solution {
public:
    vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
        if(!root) return {};
        vector<vector<int> > ans;
        stack<TreeNode*> s1;
        stack<TreeNode*> s2;
        s1.push(root);
        vector<int> tmp;
        while(!s1.empty()||!s2.empty())
        {
            while(!s1.empty())
            {
                TreeNode *t=s1.top();s1.pop();
                tmp.push_back(t->val);
                if(t->left) s2.push(t->left);
                if(t->right) s2.push(t->right);
            }
            if(!tmp.empty()) ans.push_back(tmp);
            tmp.clear();
            while(!s2.empty())
            {
                TreeNode *t=s2.top();s2.pop();
                tmp.push_back(t->val);
                 if(t->right) s1.push(t->right);
                if(t->left) s1.push(t->left);
            }
            if(!tmp.empty()) ans.push_back(tmp);
            tmp.clear();
            
        }
      return ans;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_43387999/article/details/87875136