一.问题描述
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,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
return its bottom-up level order traversal as:
[ [15,7], [9,20], [3] ]
二.我的解题思路
这道题也是树的遍历问题的变种,题目要求的是bottom-top level的遍历。所以可以先利用一个stack<vector<int>>来缓存一下,最后再从stack搬到vector之中。树的遍历采用的是广度优先遍历,可以借助队列的数据结构。测试通过的程序如下:
/**
* Definition for a binary tree node.
* 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;
stack<vector<int>> stack_res;
queue<TreeNode*> trace;
if(!root) return res;
trace.push(root);
while(trace.size() > 0){
int layer_size = trace.size();
vector<int> curr;
for(int i=0; i<layer_size; i++){
TreeNode* tmp = trace.front();
curr.push_back(tmp->val);
trace.pop();
if(tmp->left)
trace.push(tmp->left);
if(tmp->right)
trace.push(tmp->right);
}
stack_res.push(curr);
}
while(stack_res.size()>0){
res.push_back(stack_res.top());
stack_res.pop();
}
return res;
}
};