int** levelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes){
if(root == NULL){
*returnSize = 0;
** returnColumnSizes = NULL;
return NULL;
}
*returnSize = 0;
int** res = (int**)malloc(sizeof(int*) * 10001);
*returnColumnSizes = (int*)malloc(sizeof(int*)*10001);
struct TreeNode* queue[10001];
int head = 0, rear = 0;
queue[rear++] = root;
while(rear > head){
int k = 0;//记录当前个数
int pre = rear;//记录当前最后一个节点
res[*returnSize] = (int*)malloc(sizeof(int) * (pre - head));
while(pre > head){
res[*returnSize][k++] = queue[head]->val;
if(queue[head]->left != NULL){
queue[rear++] = queue[head]->left;
}
if(queue[head]->right != NULL){
queue[rear++] = queue[head]->right;
}
head++;
}
(*returnColumnSizes)[(*returnSize)++] = k;
}
return res;
}