原题:
Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).
For example:
Given binary tree {3,9,20,#,#,15,7}
,
3 / \ 9 20 / \ 15 7
return its bottom-up level order traversal as:
[ [15,7], [9,20], [3] ]
思路:和第一次做遍历一样:广度优先遍历和队列结构。不过用上了stl的reverse函数。很简单的一题。
代码如下:
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int> > levelOrderBottom(TreeNode *root) {
vector<vector<int>> res;
queue<TreeNode *> cur, next;
vector<int> level;
if(!root) return res;
cur.push(root);
while(!cur.empty()){
TreeNode *p = cur.front();
cur.pop();
level.push_back(p->val);
if(p->left) next.push(p->left);
if(p->right) next.push(p->right);
if(cur.empty()){
res.push_back(level);
level.clear();
cur = next;
while(!next.empty()){
next.pop();
}
}
}
reverse(res.begin(),res.end());
return res;
}
};