按之字形顺序打印二叉树(五十九)
题目描述:
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
代码(已在牛客上 AC)
这题就是在六十题的基础上, 稍作修改即可. 引入一个 bool
变量 toRight
判断当前是不是向右边访问, 如果是的话, 那么就给 cur[i]
进行赋值, 否则就给 cur[size - 1 - i]
赋值. 注意若当前层元素访问完后, 别忘记更新 toRight = !toRight
.
class Solution {
public:
vector<vector<int> > Print(TreeNode* root) {
if (!root) return {};
queue<TreeNode*> q;
q.push(root);
bool toRight = true;
vector<vector<int>> res;
while (!q.empty()) {
int size = q.size();
vector<int> cur(size);
for (int i = 0; i < size; ++i) {
auto r = q.front();
q.pop();
int idx = toRight ? i : size - i - 1;
cur[idx] = r->val;
if (r->left) q.push(r->left);
if (r->right) q.push(r->right);
}
toRight = !toRight;
res.push_back(cur);
}
return res;
}
};