#define MAX 10000
int** levelOrder(struct Node* root, int* returnSize, int** returnColumnSizes) {
if (root == NULL) {
*returnColumnSizes = NULL;
*returnSize = 0;
return NULL;
}
struct Node* queue[MAX] = {0};
memset(queue, 0, sizeof(struct Node*) * MAX);
int head = 0;
int tail = 0;
int** ret = (int**)malloc(sizeof(int*) * MAX);
memset(ret, 0, sizeof(int*) * MAX);
*returnSize = 0;
*returnColumnSizes = (int*)malloc(sizeof(int*) * MAX);
queue[tail++] = root;
while (head != tail) {
int size = tail - head;
(*returnColumnSizes)[*returnSize] = size;
ret[*returnSize] = (int*)malloc(sizeof(int) * size);
for (int i = 0; i < size; i++) {
ret[*returnSize][i] = queue[head]->val;
for (int j = 0; j < queue[head]->numChildren; j++) {
if (queue[head]->children[j] != NULL) {
queue[tail++] = queue[head]->children[j];
}
}
head++;
}
(*returnSize)++;
}
return ret;
}