给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历)
您在真实的面试中是否遇到过这个题?
Yes
样例
标签
Expand
给出一棵二叉树 {3,9,20,#,#,15,7}
,
3 / \ 9 20 / \ 15 7
按照从下往上的层次遍历为:
[ [15,7], [9,20], [3] ]
分析:就是层次遍历呀。。。
代码:
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
/**
* @param root : The root of binary tree.
* @return : buttom-up level order a list of lists of integer
*/
public:
vector<vector<int>> levelOrderBottom(TreeNode *root) {
// write your code here
vector<vector<TreeNode*> > ret;
if(root==nullptr)
return vector<vector<int> >();
vector<TreeNode*> cur;
cur.push_back(root);
ret.push_back(cur);
while(true)
{
vector<TreeNode*> newCur;
vector<TreeNode*> cur = ret.back();
for(auto x:cur)
{
if(x->left)
newCur.push_back(x->left);
if(x->right)
newCur.push_back(x->right);
}
if(newCur.size()>0)
ret.push_back(newCur);
else
break;
}
reverse(ret.begin(),ret.end());
vector<vector<int> > values;
for(auto v:ret)
{
vector<int> vals;
for(auto t:v)
vals.push_back(t->val);
values.push_back(vals);
}
return values;
}
};