给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
例如:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回锯齿形层次遍历如下:
[
[3],
[20,9],
[15,7]
]
实际上就是层次遍历一颗二叉树,然后再将奇数层reverse一下。用递归的方法来实现比较简单,只需要加上一个变量depth来记录深度就行。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
vector<vector<int>> vec;
solve(vec, root, 0);
for (int i = 1; i < vec.size(); i += 2) {
reverse(vec[i].begin(), vec[i].end());
}
return vec;
}
void solve(vector<vector<int>> &vec, TreeNode* node, int depth) {
if (node == nullptr) {
return;
}
if (vec.size() <= depth) {
vec.push_back(vector<int>());
}
vec[depth].push_back(node->val);
solve(vec, node->left, depth+1);
solve(vec, node->right, depth+1);
}
};