题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
思路解析:
用两个栈存储每一行的数据,从左向右顺序用一个栈存储,将栈中元素弹出时,元素的子节点存入从右向左顺序的栈,该栈元素弹出时,再次存入从左向右顺序的栈,直到两个栈都为空,所有节点全部访问完成。
/*
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> >res;
if(pRoot==NULL)
return res;
stack<TreeNode*>RtoL;
stack<TreeNode*>LtoR;
TreeNode* point;
vector<int>tmp;
LtoR.push(pRoot);
while(!LtoR.empty()||!RtoL.empty())
{
while(!LtoR.empty())
{
point=LtoR.top();
LtoR.pop();
tmp.push_back(point->val);
if(point->left!=NULL)
RtoL.push(point->left);
if(point->right!=NULL)
RtoL.push(point->right);
}
if(!tmp.empty())
{
res.push_back(tmp);
tmp.clear();
}
while(!RtoL.empty())
{
point=RtoL.top();
RtoL.pop();
tmp.push_back(point->val);
if(point->right!=NULL)
LtoR.push(point->right);
if(point->left!=NULL)
LtoR.push(point->left);
}
if(!tmp.empty())
{
res.push_back(tmp);
tmp.clear();
}
}
return res;
}
};