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