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] ]
confused what "{1,#,2,3}"
means? > read more on how binary tree is serialized on OJ.
BFS,宽度优先搜索,利用队列把头结点放入对头,依次让每一个队列的root出队,后面的队列进队。 然后进行倒序。
class Solution {
public:
vector<vector<int>> levelOrderBottom(TreeNode* root)
{
vector<vector<int>> levelOrderStore;
if (root==NULL)
return levelOrderStore;
queue<TreeNode *>q;
q.push(root);
int count=1;
int level=0;
vector<int> tmp(0);
while (!q.empty())//q.root
{
tmp.clear();
level=0;
for (int i=0;i<count;i++)//level
{
root=q.front(); //every root.
tmp.push_back(q.front()->val); //every root.
q.pop();
if (root->left!=NULL)
{
q.push(root->left);
++level;
}
if (root->right!=NULL)
{
q.push(root->right);
++level;
}
}
count=level;
vector<vector<int>>::iterator it;
it=levelOrderStore.begin();
levelOrderStore.insert(it,tmp);
}
return levelOrderStore;
}
};