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] ]
两个栈搞定
class Solution{ public: vector<vector<int> > zigzagLevelOrder(TreeNode *root) { stack<TreeNode*> level1; stack<TreeNode*> level2; vector<vector<int> > result; vector<int> levelNum; if(root==NULL) return result; level1.push(root); while(!level1.empty()||!level2.empty()) { while(!level1.empty()) { TreeNode *topNode = level1.top(); if(topNode->left) level2.push(topNode->left); if(topNode->right) level2.push(topNode->right); levelNum.push_back(topNode->val); level1.pop(); if(level1.empty()) { result.push_back(levelNum); levelNum.clear(); } } while(!level2.empty()) { TreeNode *topNode = level2.top(); if(topNode->right) level1.push(topNode->right); if(topNode->left) level1.push(topNode->left); levelNum.push_back(topNode->val); level2.pop(); if(level2.empty()) { result.push_back(levelNum); levelNum.clear(); } } } return result; } };