剑指offer59_按之字型打印二叉树_题解
按之字型打印二叉树
题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
分析
方案一:层序遍历+倒序
奇数层从左往右打印,偶数层从右往左打印
若 ret
的长度为 奇数 ,说明当前是偶数层,则对 row
执行 倒序 操作。
示例1
输入
{8,6,10,5,7,9,11}
返回值
[[8],[10,6],[5,7,9,11]]
代码
/*
1.时间复杂度:O(n^2)
2.空间复杂度:O(1)
*/
class Solution
{
public:
vector<vector<int>> Print(TreeNode *pRoot)
{
vector<vector<int>> ret;
queue<TreeNode *> q;
if(pRoot)
q.push(pRoot);
while (!q.empty())
{
vector<int> row;
int sz = q.size();
while (sz--)
{
TreeNode *top = q.front();
row.emplace_back(top->val);
q.pop();
if(top->left)
q.push(top->left);
if(top->right)
q.push(top->right);
}
if (ret.size() & 1)
reverse(row.begin(), row.end());
ret.emplace_back(row);
}
return ret;
}
};