
做题思路:用队列实现层序遍历
1.将根结点入队
2.求出队列中元素长度,出队同层结点,将他们放到一个数组中
3.将同层节点的所有孩子结点入队
int getLength(int front, int rear) {
return rear - front;
}
int** levelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes){
*returnSize = 0;
int** ret = NULL;
if(!root) {
return ret;
}
//模拟队列
struct TreeNode* queue[1024];
int front = 0;
int rear = 0;
//将根结点入队
queue[rear++] = root;
//创立临时一维数组存储出队元素
int* arr = NULL;
int* columnSizes = NULL;
//辅助变量
int length = 0;
struct TreeNode* temp;
int i = 0;
while(length = getLength(front, rear)) {
//更新returnColumnSizes大小
columnSizes = (int*)realloc(columnSizes, (*returnSize + 1) * sizeof(int));
columnSizes[*returnSize] = length;
//更新ret大小
ret = (int**)realloc(ret, (*returnSize + 1) * sizeof(int*));
//更新arr大小
arr = (int*)malloc(length * sizeof(int));
//取出队中所有元素
for(i = 0; i < length; i++) {
temp = queue[front++];
arr[i] = temp->val;
if(temp->left)
queue[rear++] = temp->left;
if(temp->right)
queue[rear++] = temp->right;
}
//将ret的第returnSize位指向arr
ret[(*returnSize)++] = arr;
}
*returnColumnSizes = columnSizes;
return ret;
}
