/**
* 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>> levelOrder(TreeNode* root) {
auto ret = vector<vector<int>>();
if (root == nullptr) return ret;
auto q = vector<TreeNode*>();
q.push_back(root);
auto level = 0;
while (!q.empty())
{
auto sz = q.size();
ret.push_back(vector<int>());
for (auto i = 0; i < sz; ++i)
{
auto t = q.front();
q.erase(q.begin());
ret[level].push_back(t->val);
if (t->left != nullptr) q.push_back(t->left);
if (t->right != nullptr) q.push_back(t->right);
}
++level;
}
return ret;
}
};
// 递归
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> v;
levelOrder(root, 0, v);
return v;
}
private:
void levelOrder(TreeNode* root, int level, vector<vector<int>>& v) {
if (root == NULL) return;
if (v.size() < level + 1) v.resize(level + 1);
v[level].push_back(root->val);
levelOrder(root->left, level + 1, v);
levelOrder(root->right, level + 1, v);
}
};