/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pRoot TreeNode类
* @return int整型二维数组
* @return int* returnSize 返回数组行数
* @return int** returnColumnSizes 返回数组列数
*/
#include <malloc.h>
int** Print(struct TreeNode* pRoot, int* returnSize, int** returnColumnSizes ) {
// write code here
*returnColumnSizes = (int*)malloc(sizeof(int) * 1500);
if (pRoot == NULL)
{
*returnSize = 0;
(*returnColumnSizes)[0] = 0;
return NULL;
}
//创建二维数组
int** ret = (int**)malloc(sizeof(int*) * 1500);
for (int i = 0; i < 1500; i++)
{
ret[i] = (int*)malloc(sizeof(int) * 800);
}
int i = 0;//行
int j = 0;//列
//循环队列
struct TreeNode* team[1000];
struct TreeNode* head = pRoot;
int front = 0;
int tail = 0;
team[0] = pRoot;
tail++;
int col = 0;
//栈
struct TreeNode* shed[1000];
int s = 0;
struct TreeNode* p = NULL;
struct TreeNode* tmp = NULL;
while((front != tail) || s != 0)
{
if (front == tail)
{
for (--s; s >= 0; s--)
{
team[tail++] = shed[s];
tail = tail % 1000;
}
(*returnColumnSizes)[i] = j;
s = 0;
i++;
j = 0;
col++;
}
//出队
p = team[front++];
front = front % 1000;
ret[i][j++] = p->val;
//入栈
if (col % 2 == 0)
{
if (p->left != NULL)
{
shed[s++] = p->left;
}
if (p->right != NULL)
{
shed[s++] = p->right;
}
}
else
{
if (p->right != NULL)
{
shed[s++] = p->right;
}
if (p->left != NULL)
{
shed[s++] = p->left;
}
}
}
(*returnColumnSizes)[i] = j;
*returnSize = ++i;
return ret;
}