class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
vector<vector<int>> v1;
vector<int> v2;
if(pRoot == nullptr)
return v1;
stack<TreeNode*> s1;
stack<TreeNode*> s2;
s1.push(pRoot);
while(s1.size() || s2.size())
{
TreeNode* pNode;
while(!s1.empty())
{
pNode = s1.top();
v2.push_back(pNode->val);
s1.pop();
odd = true;
if(pNode->left != nullptr)
{
s2.push(pNode->left);
}
if(pNode->right != nullptr){
s2.push(pNode->right);
}
}
v1.push_back(v2);
v2.clear();
while(!s2.empty())
{
pNode = s2.top();
v2.push_back(pNode->val);
s2.pop();
odd = false;
if(pNode->right != nullptr){
s1.push(pNode->right);
}
if(pNode->left != nullptr){
s1.push(pNode->left);
}
}
v1.push_back(v2);
v2.clear();
}
return v1;
}
};