/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @return int整型二维数组 * @return int* returnSize 返回数组行数 * @return int** returnColumnSizes 返回数组列数 */ #include <malloc.h> // void Inteam(struct TreeNode* data[1000], int* tail, struct TreeNode* node) // { // if (node != NULL) // { // data[(*tail)] = node; // (*tail)++; // (*tail) %= 1000; // } // } int** levelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes ) { // write code here *returnColumnSizes = (int*)malloc(sizeof(int) * 1500); if (root == NULL) { *returnSize = 0; *returnColumnSizes[0] = 0; return NULL; } int **arr = (int**)malloc(sizeof(int*) * 1500);//创建二维数组 for (int i = 0; i < 1500; i++) { arr[i] = (int*)malloc(sizeof(int) * 800); } //创建一个循环队列 struct TreeNode* data[1000] = {0}; int front = 0; int tail = 0; data[0] = root; tail++; struct TreeNode* p = NULL; int i = 0;//行数 int j = 0;//列数 struct TreeNode* head = root;//记录下一层的开始节点的双亲结点 while(front != tail) { //出队 p = data[front++]; printf("%d\n", p->val); front %= 1000; //判断是否为该层第一个元素 if (p == head->left || (head->left == NULL && p == head->right)) { (*returnColumnSizes)[i] = j; j = 0; i++; arr[i][j++] = p->val; struct TreeNode* tmp = p; int t = 0; while(1) //更新head的值 { if (tmp->left != NULL || tmp->right != NULL) { head = tmp; break; } if ((front+t)%1000 != tail) { tmp = data[(front+t)%1000]; t++; } else { break; } } } else { arr[i][j++] = p->val; printf("%d%d", front, tail); } //入队 if (p->left != NULL) { data[tail++] = p->left; tail %= 1000; } if (p->right != NULL) { data[tail++] = p->right; tail %= 1000; } } (*returnColumnSizes)[i] = j; *returnSize = i+1; return arr; }