leetcode做题笔记102. 二叉树的层序遍历

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

思路一:递归

cpp 复制代码
int** levelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes){
    int** ans=(int**)malloc(sizeof(int*)*2000);
    *returnSize=0;
    if(!root) return NULL;
    int columnSizes[3000];
    struct TreeNode* queue[3000];
    int rear=0;int head=0;
    queue[rear++]=root;

    while(rear!=head){
        ans[(*returnSize)]=(int*)malloc(sizeof(int)*(rear-head));
        columnSizes[(*returnSize)]=rear-head;
        int start=head;
        head=rear;
        for(int i=start;i<head;i++){
            ans[(*returnSize)][i-start]=queue[i]->val;
            if(queue[i]->left) queue[rear++]=queue[i]->left;
            if(queue[i]->right) queue[rear++]=queue[i]->right;
        }
        (*returnSize)++;
       
    }
    *returnColumnSizes=(int*)malloc(sizeof(int)*(*returnSize));
    for(int i=0;i<*returnSize;i++) (*returnColumnSizes)[i]=columnSizes[i];
    return ans;
}

分析:

本题要求二叉树的层序遍历,可想到使用BFS算法,将二叉树每层放入数组中最后输出数组,可想到利用队列插入队尾删除队首的特性模拟队列记录每层的数再输出

总结:

本题考察二叉树的层序遍历,利用队列的特性可以解决

相关推荐
Jerry8 小时前
LeetCode 459. 重复的子字符串
算法
海石11 小时前
1500分的题目,确实有实力,不过还是我略胜一筹
算法·leetcode
海石11 小时前
【记忆化搜索】条条大路通AC,走好适合你的那一条,走到后再考虑走得快
算法·leetcode
Jerry13 小时前
LeetCode 151. 反转字符串中的单词
算法
β添砖java14 小时前
2025最新快速构建企业级虚拟专用网络环境学习笔记
笔记·学习
qianpeng414 小时前
IDA PRO笔记
笔记
a11177615 小时前
LM 算法迭代过程动画演示(SLAM)
算法
头茬韭菜15 小时前
Context 的生死抉择:四层压缩、截断算法与 Session Memory
算法·ai
Jerry16 小时前
LeetCode 541. 反转字符串 II
算法
Jerry16 小时前
LeetCode 344. 反转字符串
算法