🏆个人主页:企鹅不叫的博客
🌈专栏
⭐️ 博主码云gitee链接:代码仓库地址
⚡若有帮助可以【关注+点赞+收藏】,大家一起进步!
💎一、题目
🏆1.题目描述
🏆2.原题链接
💎二、解题报告
🏆1.思路分析
🔑思路:
层序遍历,先记录当前节点的值,然后再遍历左孩子,直到当前节点没有左孩子则遍历其右孩子,若右孩子也没有则回溯到上一个节点遍历其右孩子,直至遍历完树
🏆2.代码详解
int* levelOrder(struct TreeNode* root, int* returnSize){
if(root == NULL){ //1
*returnSize = 0;
return NULL;
}
int front = 0, ret = 0, index = 0; //2
int *arr = (int*)malloc(sizeof(int)*1001); //3
struct TreeNode* queue[1001]; //4
struct TreeNode* q; //5
queue[ret++] = root; //6
while(front < ret){
q = queue[front++]; //7
arr[index++] = q->val; //8
if(q->left){ //9
queue[ret++] = q->left;
}
if(q->right){
queue[ret++] = q->right;
}
}
*returnSize = index;
return arr;
}
1.日常判空
2.index是返回数组的下标,ret是队尾,front是队头
3.创建返回数组
4.创建队列
5.工作指针
6.首先将root插入到队列中
7.将目前队列中root给q
8.将root中的值给arr
9.之后将root左右子树放入到队列中,直到front追上ret表示没有元素结束循环