思路来自104,作层序遍历,因为层序遍历就是从上到下,从左到右 而要求是从下到上,从左到右输出,只需稍作修改;
vector<vector> out 是最终的输出;
temp 是临时的容器,对二叉树作层序遍历,把某一层的数据都放入temp,该层处理完时,把temp放进out;
需要注意的是,temp放入out后,需要clear();
这样得到的out每一个单元 是某一层的从左到右的遍历结果,再把out的各个单元逆序,就可以得到二叉树的从下到上,从左到右的遍历结果;
代码:
class Solution {
public:
static vector<vector<int>> levelOrderBottom(TreeNode* root) {
vector<vector<int>> out;
vector<int> temp;
if (!root) return out;
queue<TreeNode *> q;
q.push(root);
int len = 0;
while (!q.empty()) {
len = q.size();
while(len--){
TreeNode *ptr = q.front();
q.pop();
temp.push_back(ptr->val);
if (ptr->left) q.push(ptr->left);
if (ptr->right) q.push(ptr->right);
}
out.push_back(temp);
temp.clear();
}
for (int i = 0, j = out.size() - 1; i <= j; i++, j--){
temp = out[i];
out[i] = out[j];
out[j] = temp;
}
return out;
}
};