前言
1、暴力解法。用栈做层次遍历,得到的结果是从root到最后一层的;再将二维数组进行逆着输出:从最后一行到第一行的顺序输出,列的顺序保持不变。注:这种方法,最后提交时,并没有按照逆着的方向输出,但是在VS上调试,结果是正确的。原因暂时不明~
2、待优化。
题目
给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
例如:
给定二叉树 [3,9,20,null,null,15,7],
返回其自底向上的层次遍历为:
实现方法
一、暴力解法
/**
* 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<int> res1;
vector<vector<int> > res2;
queue<TreeNode*> q;
TreeNode* current=root;
if(root) {
res1.push_back(root->val);
res2.push_back(res1);
res1.clear();
}
while(current){
if(current->left) {
res1.push_back(current->left->val);
q.push(current->left);
}
if(current->right) {
res1.push_back(current->right->val);
q.push(current->right);
}
if(!res1.empty()) {
res2.push_back(res1);
res1.clear();
}
if(q.empty()) return res2;
current=q.front();
q.pop();
}
//从低向上输出
vector<int> v1;
vector<vector<int>> v2;
for(int i=res2.size()-1;i>=0;i--){
for(int j=0;j<res2.size();j++){
v1.push_back(res2[i][j]);
}
v2.push_back(v1);
v1.clear();
}
return v2;
}
};