class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector <vector <int>> ret;
if (!root) {
return ret;
}
queue <TreeNode*> q;
q.push(root);
while (!q.empty()) {
int currentLevelSize = q.size();
ret.push_back(vector <int> ());
for (int i = 1; i <= currentLevelSize; ++i) {
auto node = q.front(); q.pop();
ret.back().push_back(node->val);
if (node->left) q.push(node->left);
if (node->right) q.push(node->right);
}
}
return ret;
}
};
void recurseion(struct TreeNode* root, int* returnSize, int* col, int cnt,int** arr){
if (!root)
return;
if (cnt+1 > *returnSize)
*returnSize = cnt+1;
if (col[cnt] == 0)
arr[cnt] = (int*)calloc(1000, sizeof(int*));
arr[cnt][col[cnt]++] = root->val;
recurseion(root->left, returnSize, col, cnt+1, arr);
recurseion(root->right, returnSize, col, cnt+1, arr);
}
int** levelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes){
int** arr = (int**)calloc(1000, sizeof(int*));
*returnSize = 0;
*returnColumnSizes = (int*)calloc(1000, sizeof(int));
recurseion(root, returnSize, *returnColumnSizes, 0, arr);
return arr;
}