分析:
考察树的层次遍历
算法
int** levelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes)
{
if(!root)
{
*returnSize=0;
return 0;
}
int **res=(int **)malloc(sizeof(int)*2000);
*returnColumnSizes=(int *)malloc(sizeof(int)*2000);
int i=0;
struct TreeNode *p=root;
struct TreeNode *queue[2000]; //设置循环队列
int rear=0;
int front=0;
queue[rear++]=p;
while(rear!=front)
{
//设置每一行的大小
int size=rear-front;
res[i]=(int *)malloc(sizeof(int)*size);
(*returnColumnSizes)[i]=size;
//遍历每一层
for(int j=0;j<size;j++) //for循环保证遍历完整的一层
{
//出队
p=queue[front];
front=(front+1)%2000;
//入队
if(p->left)
{
queue[rear]=p->left;
rear=(rear+1)%2000;
}
if(p->right)
{
queue[rear]=p->right;
rear=(rear+1)%2000;
}
res[i][j]=p->val;
}
++i; //层数加1
}
*returnSize=i; //记录总层数即二维数组的行数
return res;
}