/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @return int整型二维数组 * @return int* returnSize 返回数组行数 * @return int** returnColumnSizes 返回数组列数 */ void resort(int* returnSize, int** returnColumnSizes,int** arr,struct TreeNode* queue[]) { int start=0,end=1; for(int row=0;row<*returnSize;row++){ int temp=end-start; *((*returnColumnSizes)+row)=temp; arr[row]=malloc((*returnColumnSizes)[row]*sizeof(int));//这里一定注意,解引用的优先值是最低的 for(int i=0;i<temp;i++) { arr[row][i]=queue[start]->val; if(queue[start]->left) queue[end++]=queue[start]->left; if(queue[start]->right) queue[end++]=queue[start]->right; start++; } } } int finddepth(struct TreeNode* root) { if(!root) return 0; int leftdepth=finddepth(root->left); int rightdepth=finddepth(root->right); return (leftdepth>rightdepth?leftdepth:rightdepth)+1; } int** levelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes ) { if(!root) return NULL; *returnSize=finddepth(root); int** arr=malloc(*returnSize*(sizeof(int*))); *returnColumnSizes=malloc(*returnSize*sizeof(int)); struct TreeNode* queue[1500]={root}; resort(returnSize,returnColumnSizes,arr,queue); return arr; }