时间限制:1秒
空间限制:32768K
热度指数:66367
算法知识视频讲解
题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
vector<vector<int> > vec;
if (pRoot == NULL)
{
return vec;
}
queue<TreeNode*> q1;
q1.push(pRoot);
int order = 0;
while (!q1.empty())
{
int s = q1.size();
int s1 = s;
vector<int> v;
while (s--)
{
TreeNode *q = q1.front();
q1.pop();
v.push_back(q->val);
if (q->left)
{
q1.push(q->left);
}
if (q->right)
{
q1.push(q->right);
}
}
if (order%2==1)
{
for (int i = 0; i < s1/2; i++)
{
int temp = v[i];
v[i] = v[s1 - i - 1];
v[s1 - i - 1] = temp;
}
}
vec.push_back(v);
order++;
}
return vec;
}
};
由于是按之字形打印,从左到右,从右到左依次,使用order记录打印顺序,将应该从右向左依次打印的结点进行逆置,然后打印。