Leetcode 102. 二叉树的层序遍历

121 阅读1分钟

“Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。”

今天写了二叉树的中序遍历,所以打算把热题100中关于二叉树的题,都解一遍,方便大家专项学习

一、题目描述

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

二、思路分析

  • 这道题可以用BFS或DFS进行解题

  • 我选用BFS,他是从上到下从左到右进行扫荡,和题目要求一致

  • BFS需要用到队列,进行存取

三、AC 代码:

class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        //创建返回结果的数组集合
        List<List<Integer>>res = new ArrayList<List<Integer>>();
        //为空直接返回
        if(root == null){
            return res;
        }
        //创建链表
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        //将根节点存入链表
        queue.add(root);
        //边界条件不为空才循环轮询
        while(!queue.isEmpty()){
            //循环次数
            int size = queue.size();
            //新建存放的集合
            List<Integer>list = new ArrayList<Integer>();
            for(int i = 0;i<size;i++){
                //拿出根节点
                TreeNode node = queue.remove();
                //左子树不为空则存入左子树
                if(node.left != null){
                    queue.add(node.left);
                }
                //右子树不为空则存入右子树
                if(node.right != null){
                    queue.add(node.right);
                }
                //存入当前节点
                list.add(node.val);
            }
            //将当前集合存入结果集合
            res.add(list);
        }
        return res;
    }
}

四、总结:

  • 好了,代码撸完,我们总结一下
    • 首先创建队列

    • 队列中的根节点存入

    • 之后取出存入集合,并存入左右子树的根节点

最后这个算法是Leetcode的第102题,是热题100里的题,去年我刷了热题100用时一个月左右,接下来我会继续更新,小伙伴可以点赞关注,如果你也在刷热题100的话,希望可以对你有一些启发!