题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
代码:
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
struct node
{
int cn;
TreeNode* p;
};
vector<vector<int> > Print(TreeNode* pRoot) {
vector<vector<int>>res;
vector<int>tmp;
if(pRoot==NULL) return res;
queue<node>q;
node now,nex;
now.cn=1,now.p=pRoot;
q.push(now);
int nowcn=1;
while(!q.empty())
{
now=q.front();
q.pop();
if(now.cn>nowcn)
{
if(nowcn%2==0) reverse(tmp.begin(), tmp.end());
res.push_back(tmp);
tmp.clear();
nowcn++;
}
tmp.push_back(now.p->val);
nex.cn=now.cn+1;
if(now.p->left!=NULL){
nex.p=now.p->left;
q.push(nex);}
if(now.p->right!=NULL){
nex.p=now.p->right;
q.push(nex);}
}
if(now.cn%2==0) reverse(tmp.begin(), tmp.end());
res.push_back(tmp);
return res;
}
};