题目:
题解:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/**
* Return an array of arrays of size *returnSize.
* The sizes of the arrays are returned as *returnColumnSizes array.
* Note: Both returned array and *columnSizes array must be malloced, assume
* caller calls free().
*/
//*returnSize表示行数,*(*returnColumnSizes)表示一个一维整数数组,分别表示每一行的列数
int** levelOrder(struct TreeNode* root, int* returnSize,
int** returnColumnSizes) {
int **ret = malloc(sizeof(int*) * 2010), k = 0;
// ret可看作一个二维数组,第一维大小是2010,第二维大小未知
*returnColumnSizes = malloc(sizeof(int) * 2010);
typedef struct TreeNode TreeNode;
TreeNode **que = malloc(sizeof(TreeNode*) * 2010);
// TreeNode** que 定义了一个名为 que 的指针,该指针指向一个数组,
//数组的每个元素都是一个指向 TreeNode 的指针
int front, rear;
front = rear = 0;
if (root == NULL) {
*returnSize = 0;
return ret;
}
que[rear++] = root;
while (rear != front) {
int count = rear - front;
int* r = malloc(sizeof(int) * count);
for (int i = 0; i < count; ++i) {
TreeNode* t = que[front++];
r[i] = t->val;
if (t->left != NULL)
que[rear++] = t->left;
if (t->right != NULL)
que[rear++] = t->right;
}
(*returnColumnSizes)[k] = count;
ret[k++] = r;
}
*returnSize = k;
return ret;
}