题解 | #从上往下打印二叉树#
从上往下打印二叉树
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; }