https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/
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).
For example:
Given binary tree {3,9,20,#,#,15,7}
,
3 / \ 9 20 / \ 15 7
return its zigzag level order traversal as:
[ [3], [20,9], [15,7] ]
/** * 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>> ans; if(!root) return ans; vector<TreeNode> box; box.push_back(*root); int pre=1, cur=0; bool l2r = true; while(pre) { vector<int> v; if(l2r) { while(pre--) { TreeNode nd = box.front(); box.erase(box.begin()); v.push_back(nd.val); if(nd.left) {box.push_back(*nd.left); cur++;} if(nd.right) {box.push_back(*nd.right); cur++;} } } else { while(pre--) { TreeNode nd = box.back(); box.erase(box.end()); v.push_back(nd.val); if(nd.right) {box.insert(box.begin(), *nd.right);cur++;} if(nd.left) {box.insert(box.begin(), *nd.left); cur++;} } } ans.push_back(v); pre = cur; cur = 0; l2r = !l2r; } return ans; } };