/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*//**
* Return an array of arrays of size *returnSize.
* The sizes of the arrays are returned as *returnColumnSizes array.
* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
*///returnSize是二维数组的层数,returnColumnSizes是一个存放每一层树的元素个数的二维数组(但当一维数组使用)int**levelOrder(structTreeNode* root,int* returnSize,int** returnColumnSizes){*returnSize=0;if(root==NULL){returnNULL;}int**res=(int**)malloc(sizeof(int*)*2000);//为返回的数组创建空间*returnColumnSizes=(int**)malloc(sizeof(int*)*2000);//为returnColumnSizes分配层数structTreeNode*QUEUE[2000];//创建队列int front=0;//指向队列的第一个元素int rear=1;//指向队列的最后一个元素structTreeNode* out;//存放出队的元素的数据,方便放入数列中(或者也可以先放入数列,再出队)
QUEUE[0]=root;//让根入队while(rear!=front)//当队列不为空时,持续地进行层序遍历{int colsize=0;//存放每一层的最后一个元素下标int last=rear;//用last存放每一层入队的最后一个元素的位置
res[*returnSize]=(int*)malloc(sizeof(int)*(last-front));//为当前层的数列分配空间,[*returSize]就相当于a[i][t]中的i,last-front就代表这一层的元素个数while(front<last)//当当前层还没有全部出队完时{
out=QUEUE[front++];//出队以及存放出队的元素
res[*returnSize][colsize++]=out->val;//将出队元素存放进数组中if(out->left!=NULL){
QUEUE[rear++]=out->left;//当出队元素左子树不为空时,让它的左孩子入队}if(out->right!=NULL){
QUEUE[rear++]=out->right;//同上}}(*returnColumnSizes)[*returnSize]=colsize;//存放当前层的元素个数(*returnSize)++;//层数增加一层}return res;}