题目:
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
For example:
Given binary tree {3,9,20,#,#,15,7}
,
3 / \ 9 20 / \ 15 7
return its level order traversal as:
[ [3], [9,20], [15,7] ]解答:
递归时记录树的高度。如果高度更高了,就新增加一个 vector;如果是已经出现的高度,就仅在已有 vector 中增加元素。、
/**
* 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>> ans;
void levelInsert(TreeNode* root, int curLevel)
{
if(root == NULL) return;
else if(curLevel > ans.size())
{
vector<int> newLevel;
newLevel.push_back(root->val);
ans.push_back(newLevel);
}
else
{
ans[curLevel - 1].push_back(root->val);
}
levelInsert(root->left, curLevel + 1);
levelInsert(root->right, curLevel + 1);
return;
}
vector<vector<int>> levelOrder(TreeNode* root) {
levelInsert(root, 1);
return ans;
}
};
题目:
II 的题意与 I 相同,只是返回的顺序不同。
return its bottom-up level order traversal as:
[ [15,7], [9,20], [3] ]解答:
将上一题的最终结果,利用 reverse(beginiterator, enditerator) 函数反转(并不是 vector 的成员函数,是单独函数)?暂时没有想到更快的解法,以后再来修改。
class Solution {
public:
vector<vector<int>> ans;
void levelInsert(TreeNode* root, int curLevel)
{
......
}
vector<vector<int>> levelOrderBottom(TreeNode* root) {
levelInsert(root, 1);
reverse(ans.begin(), ans.end());
return ans;
}
};