题目描述
给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
示例 1:
复制代码
- 输入:root = [3,9,20,null,null,15,7]
- 输出:[[3],[20,9],[15,7]]
示例 2:
复制代码
- 输入:root = [1]
- 输出:[[1]]
个人C++解答
GYL
层序遍历模板,数组保存每一层,层的奇偶变化改变判断是偶逆置(reverse);
复制代码
- /**
- * Definition for a binary tree node.
- * struct TreeNode {
- * int val;
- * TreeNode *left;
- * TreeNode *right;
- * TreeNode() : val(0), left(nullptr), right(nullptr) {}
- * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
- * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
- * };
- */
- class Solution {
- public:
- vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
- if (root == nullptr) return {};
- vector<TreeNode*> q;
- vector<vector<int>> ans;
- int flag = 0;
- q.push_back(root);
- while (!q.empty()) {
- vector<TreeNode*> vec;
- vector<int> temp;
- flag ++;
- for (int i = 0; i <q.size(); i++) {
- temp.push_back(q[i]->val);
- TreeNode* node = q[i];
- if (node->left)
- vec.push_back(node->left);
- if (node->right)
- vec.push_back(node->right);
- }
- if(flag%2==0) reverse(temp.begin(),temp.end());
- ans.push_back(temp);
- q = move(vec);
- }
- return ans;
- }
- };