vector<vector<int> > levelOrderBottom(TreeNode *root) { vector<vector<int> > answer; if (root == NULL) { return answer; } queue<traverseNode> tmpQueue; traverseQueue.swap(tmpQueue); traverseQueue.push(traverseNode(root, 1)); while(!traverseQueue.empty()) { traverseNode topNode = traverseQueue.front(); if (topNode.level > answer.size()) { vector<int> emptyVector; answer.push_back(emptyVector); } answer[topNode.level - 1].push_back(topNode.node->val); traverseQueue.pop(); if (topNode.node -> left != NULL) { traverseQueue.push(traverseNode(topNode.node->left, topNode.level + 1)); } if (topNode.node -> right != NULL) { traverseQueue.push(traverseNode(topNode.node->right, topNode.level + 1)); } } for (int i = 0; i < (answer.size()/2); i++) { answer[i].swap(answer[answer.size() - i - 1]); } return answer; }
void pop() { if (q1.empty()) throw runtime_error("bad operation"); while (q1.size() != 1) { q2.push(q1.front()); q1.pop(); } q1.pop(); q1.swap(q2); // swap element back }
inline void swap( queue<T, Container> &left, queue<T, Container> &right ) noexcept( noexcept( left.swap( right ) ) ) { left.swap( right ); }