Question

Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).

Difficulty:Medium

Category:Tree, Stack, Breadth-first Search

Analyze

Solution


class Solution {
 public:
  vector<vector<int>> zigzagLevelOrder(TreeNode *root) {
    vector<vector<int>> res;
    traverse(root, 1, res, true);
    return res;
  }

  void traverse(TreeNode const *root, int level, vector<vector<int>> &res,
                bool left_to_right) {
    if (!root) return;

    if (level > res.size()) res.push_back(vector<int>());
    if (left_to_right) {
      res[level - 1].push_back(root->val);
    } else {
      res[level - 1].insert(res[level - 1].begin(), root->val);
    }
    traverse(root->left, level + 1, res, !left_to_right);
    traverse(root->right, level + 1, res, !left_to_right);
  }
};
By guozetang            Updated: 2020-09-19 13:02:30

results matching ""

    No results matching ""