/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param pRoot TreeNode类 
     * @return int整型vector<vector<>>
     */
    vector<vector<int> > Print(TreeNode* pRoot) {
        // write code here
        TreeNode* head = pRoot;
        vector<vector<int>> res;
        if(head == NULL)return res;
        stack<TreeNode*> s1, s2;
        s1.push(head);
        vector<int> temp;
        while(!s1.empty()||!s2.empty())
        {
            while(!s1.empty())
            {
                TreeNode* node = s1.top();
                temp.push_back(node->val);
                if(node->left)
                s2.push(node->left);
                if(node->right)
                s2.push(node->right);
                s1.pop();
            }
            if(temp.size())
            res.push_back(temp);
            temp.clear();
            while(!s2.empty())
            {
                TreeNode* node = s2.top();
                temp.push_back(node->val);
                if(node->right)
                s1.push(node->right);
                if(node->left)
                s1.push(node->left);
                s2.pop();
            }
            if(temp.size())
            res.push_back(temp);
            temp.clear();
        }
        return res;
    }
};