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] ]
vector<vector<int> > zigzagLevelOrder(TreeNode *root) {
queue<TreeNode *> q;
stack<TreeNode *> s;
vector<vector<int> > vvi;
if(root == NULL) return vvi;
vector<int> vi;
int sum = 1;
int tmp = 0;
bool flg = true;
q.push(root);
while(!q.empty()){
TreeNode *node = q.front();
q.pop();
if(flg){
vi.push_back(node->val); //从队列中出元素 进入目标容器
}else{
vi.push_back(s.top()->val); s.pop(); //从栈中出元素 进入目标容器
}
sum--;
if(flg){ //反向
if(node->left) { s.push(node->left); }
if(node->right) { s.push(node->right); }
}
if(node->left) { q.push(node->left); tmp++; }
if(node->right) { q.push(node->right); tmp++; }
if(0 == sum){
vvi.push_back(vi);
vi.clear();
sum = tmp;
tmp = 0;
flg = !flg;
}
}
return vvi;
}