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],
]
偷了一下懒,将上一题的结果反过来就是 。。。
/**
* 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) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<vector<int> > answers;
if(root == NULL)
return answers;
queue<TreeNode *> * nodes = new queue<TreeNode *>();
vector<int> * v = NULL;
TreeNode * leftFirst;
nodes->push(root);
leftFirst = root;
bool hasLeftFirst = true;
while(!nodes->empty())
{
TreeNode * tmp = nodes->front();
nodes->pop();
if(tmp == leftFirst)
{
if(v != NULL)
answers.push_back(*v);
v = new vector<int>();
hasLeftFirst = false;
}
v->push_back(tmp->val);
if(tmp->left != NULL)
{
nodes->push(tmp->left);
if(hasLeftFirst == false)
{
hasLeftFirst = true;
leftFirst = tmp->left;
}
}
if(tmp->right != NULL)
{
nodes->push(tmp->right);
if(hasLeftFirst == false)
{
hasLeftFirst = true;
leftFirst = tmp->right;
}
}
}
if(v != NULL)
answers.push_back(*v);
vector<vector<int> > answers1;
for(int i = answers.size()-1;i>=0;i--)
answers1.push_back(answers.at(i));
return answers1;
}
};