/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
class Solution {
public:
    vector<vector<int> > Print(TreeNode* pRoot) {
        if(pRoot==nullptr)
            return vector<vector<int> >();


        stack<TreeNode*> s1;
        stack<TreeNode*> s2;
        TreeNode* bt;
        //放入第一层
        s1.push(pRoot);



        vector<vector<int> > res;
        vector<int> temp;


        int i=0;
        while(s1.empty()!=1||s2.empty()!=1)
        {
            //遍历奇数层
            while(s1.empty()!=1)
            {
                bt=s1.top();
                s1.pop();

                temp.push_back(bt->val);

                //奇数层的子叶结点加入偶数层
                if(bt->left!=nullptr)
                    s2.push(bt->left); 
                if(bt->right!=nullptr)
                    s2.push(bt->right); 

            }
            if(temp.empty()!=1)
                res.push_back(temp);
            temp.clear();

            //遍历偶数层
            while(s2.empty()!=1)
            {
                bt=s2.top();
                s2.pop();

                temp.push_back(bt->val);

                //奇数层的子叶结点加入偶数层,注意要先加右再加左才是完全相反的
                if(bt->right!=nullptr)
                    s1.push(bt->right); 
                if(bt->left!=nullptr)
                    s1.push(bt->left); 
            }

            if(temp.empty()!=1)
                res.push_back(temp);
            temp.clear();

        }

        return res;
        
    }
    
};

大体上的思路是将层序遍历中的队列换为栈,并作一些小调整即可实现