Binary Tree Level Order Traversal II
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.
对于反转的操作也是Leetcode惯出的题目,或者说面试惯考的题目,知道怎么应付就好办,顺序遍历,然后reverse就可以了。
class Solution {
public:
vector<vector<int> > levelOrderBottom(TreeNode *root)
{
vector<vector<int> > v;
if (!root) return v;
queue<TreeNode *> qt1;
qt1.push(root);
queue<TreeNode *> qt2;
vector<int> itmedia;
while (!qt1.empty())
{
while (!qt1.empty())
{
TreeNode *t = qt1.front();
qt1.pop();
itmedia.push_back(t->val);
if (t->left) qt2.push(t->left);
if (t->right) qt2.push(t->right);
}
v.push_back(itmedia);
itmedia.clear();
qt2.swap(qt1);
}
reverse(v.begin(), v.end());
return v;
}
};
//2014-2-16 update
vector<vector<int> > levelOrderBottom(TreeNode *root)
{
vector<vector<int> > rs;
if (!root) return rs;
queue<TreeNode *> qu[2];
qu[0].push(root);
bool flag = false;
while (!qu[flag].empty())
{
rs.push_back(vector<int>());
while (!qu[flag].empty())
{
TreeNode *t = qu[flag].front();
qu[flag].pop();
rs.back().push_back(t->val);
if (t->left) qu[!flag].push(t->left);
if (t->right) qu[!flag].push(t->right);
}
flag = !flag;
}
reverse(rs.begin(), rs.end());
return rs;
}