题解 | #从上往下打印二叉树#
从上往下打印二叉树
https://www.nowcoder.com/practice/7fe2212963db4790b57431d9ed259701
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return int整型一维数组
* @return int* returnSize 返回数组行数(改为返回值的个数)
*/
//方法:利用队列(用于树的广度遍历),队列有队头和队尾下标,暂时称为指针
//新建数组arr和返回值个数n,分配空间,用于存储返回值
//新建一个指针队列queue,新建队列头尾指针font,rear,从rear入队,从font出队
//新建临时指针temp,存储出队元素
//首先判断二叉树是否为空,空则返回NULL.否则进行下一步
//将root入队,queue[rear] = root,然后rear自增
//接下来是while循环判断队列是否为空,即font<rear是否成立
//出队,将队列头指针font指向的值给临时指针temp,font自增
//判断出队元素的左右子树不为空,则分别入队
//最后将出队元素的val值存放入数组arr[n],n自增,再次循环判断
//最后更新返回数组的长度
//返回存储出队元素的数组
#define SIZE 1001
int* PrintFromTopToBottom(struct TreeNode* root, int* returnSize )
{
// write code here
//新建数组arr和返回值个数n,分配空间,用于存储返回值
int *arr = (int*)malloc(SIZE*sizeof(int));
int n = 0;
//新建一个指针队列queue,新建队列头尾指针font,rear,从rear入队,从font出队
struct TreeNode *queue[SIZE];
int font=0, rear=0;
//新建临时指针temp,存储出队元素
struct TreeNode* temp;
//首先判断二叉树是否为空,空则返回NULL.否则进行下一步
if(!root)
{
return NULL;
}
//将root入队,queue[rear] = root,然后rear自增
queue[rear++] = root;
//接下来是while循环判断队列是否为空,即font<rear是否成立
//出队,将队列头指针font指向的值给临时指针temp,font自
//判断出队元素的左右子树不为空,则分别入队
//最后将出队元素的val值存放入数组arr[n],n自增,再次循环判断
while(font<rear)
{
temp = queue[font++]; //出队
if(temp->left)
{
queue[rear++] = temp->left; //左子树入队
}
if(temp->right)
{
queue[rear++] = temp->right; //右子树入队
}
arr[n++]=temp->val; //将出队元素的val值存放入数组arr[n],n自增
}
//最后更新返回数组的长度
*returnSize = n;
//返回存储出队元素的数组
return arr;
}
查看14道真题和解析