题目
不分行从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如输入{8,6,10,#,#,2,1},如以下图中的示例二叉树,则依次打印8,6,10,2,1(空节点不打印,跳过),请你将打印的结果存放到一个数组里面,返回。
数据范围:
0≤节点总数≤1000
-1000≤节点值≤1000
解析
- 初始化:一个队列q, 将root节点入队列q
- 如果队列不空,做如下操作:
- 弹出队列头,保存为temp,temp的左右非空孩子加入队列
- 做2,3步骤,知道队列为空
代码
int* PrintFromTopToBottom(struct TreeNode* root, int* returnSize ) {
int *num, pos = 0;
num = (int *)malloc(sizeof(int) * 1001);
*returnSize = pos;
if (!root)
return num; //空树的情形
struct TreeNode *que[1000], *temp;
int front = 0, rear = 0; //设置队首队尾指针
que[++rear] = root;
while (rear != front) //若队列不为空时
{
temp = que[++front];
num[pos++] = temp->val; //指向本层子树的根节点
if (temp->left) //左孩子不为空
que[++rear] = temp->left; //将左孩子入队列
if (temp->right) //右孩子不为空
que[++rear] = temp->right; //将右孩子入队列
}
*returnSize = pos; //返回层数
return num; //返回队列
}