本文已参与「新人创作礼」活动,一起开启掘金创作之路。
问题
给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)。
思路
与二叉树的层序遍历相同,不同的是在奇数层要将数组进行 reverse。
代码实现
/*
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) {
if (pRoot == NULL) return {};
int count = 0;
vector<vector<int>> res;
queue<TreeNode*> que;
que.push(pRoot);
while (!que.empty())
{
int size = que.size();
vector<int> tmp;
for (int i = 0; i < size; i++)
{
TreeNode* node = que.front();
que.pop();
tmp.push_back(node->val);
if (node->left) que.push(node->left);
if (node->right) que.push(node->right);
}
// 奇数层 reverse
if (count % 2 == 1)
{
reverse(tmp.begin(), tmp.end());
}
count++;
res.push_back(tmp);
}
return res;
}
};