题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
/*
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)
{
vector<vector<int> > vec;
if(pRoot==NULL) return vec;
stack<TreeNode *> stack1,stack2;
stack1.push(pRoot);
while(!stack1.empty()||!stack2.empty())
{
vector<int> data;
TreeNode* pNode=NULL;
if(!stack1.empty())
{
while(!stack1.empty())
{
pNode=stack1.top();
data.push_back(pNode->val);
stack1.pop();
if(pNode->left!=NULL)
stack2.push(pNode->left);
if(pNode->right!=NULL)
stack2.push(pNode->right);
}
}
else if(!stack2.empty())
{
while(!stack2.empty())
{
pNode=stack2.top();
data.push_back(pNode->val);
stack2.pop();
if(pNode->right!=NULL)
stack1.push(pNode->right);
if(pNode->left!=NULL)
stack1.push(pNode->left);
}
}
vec.push_back(data);
}
return vec;
}
};