和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;   
}