和NC15的区别在于这里并不需要把每层的数值单独放在一个数组里,而是把二叉树的所有元素放在一个大数组里,那么问题就简单些了。
int* PrintFromTopToBottom(struct TreeNode* root, int* returnSize ) {
if(root == NULL)
return NULL; //特殊情况单独处理
struct TreeNode* queue[1001]; // 新建一个队列
int* arr = (int*)malloc(sizeof(int) * 1001); //返回数组
int head = 0, rear = 0; //队列的头尾指针
queue[rear++] = root; //根结点入队列,尾指针右移一位
int k = 0; //数组下标,用来计数
while(head != rear){ //队列非空时
int gap = rear- head; //队列中的元素个数
while(gap--){
struct TreeNode* p = queue[head]; //队头元素出队
arr[k++] = p->val; //结点值复制到数组
if(p->left != NULL)
queue[rear++] = p->left; //左孩子结点入队
if(p->right != NULL)
queue[rear++] = p->right; //右孩子结点入队
head++; //对头指针后移一位
}
}
*returnSize = k; //返回数组的大小
return arr;
}

京公网安备 11010502036488号