This question is almost same as the previous one.
I just use a stack (another vector) of vector<int> to store the level result. Then reverse it.
1 /** 2 * Definition for binary tree 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */10 class Solution {11 public:12 vector> levelOrderBottom(TreeNode *root) {13 vector > result;14 if (!root) return result;15 stack > s;16 queue q;17 vector level;18 q.push(root);19 int current = 1, future = 0;20 while (!q.empty()) {21 TreeNode *tmp = q.front();22 q.pop(), current--;23 if (tmp->left) {24 q.push(tmp->left);25 future++;26 }27 if (tmp->right) {28 q.push(tmp->right);29 future++;30 }31 level.push_back(tmp->val);32 if (!current) {33 current = future;34 future = 0;35 s.push(level);36 level.clear();37 }38 }39 while (!s.empty()) {40 result.push_back(s.top());41 s.pop();42 }43 return result;44 }45 };