当前位置: 首页 > article >正文

LeetCode.102 二叉树的层序遍历

题目描述

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

提示:

  • 树中节点数目在范围 [0, 2000] 内
  • -1000 <= Node.val <= 1000

解题思路

对二叉树进行层序遍历即可,下一层的所有节点是当前层的所有左右子节点。用一个队列存储当前层的所有节点就好。

算法流程

1特例处理: 当根节点为空,则返回空列表 [] 。


2.初始化: 打印结果列表 res = [] ,包含根节点的队列 queue = [root] 。


3.BFS 循环: 当队列 queue 为空时跳出。
3.1新建一个临时列表 tmp ,用于存储当前层打印结果。
3.2当前层打印循环: 循环次数为当前层节点数(即队列 queue 长度)。

3.2.1出队: 队首元素出队,记为 node。
3.2.2打印: 将 node.val 添加至 tmp 尾部。
3.2.3添加子节点: 若 node 的左(右)子节点不为空,则将左(右)子节点加入队列 queue 。

3.3将当前层结果 tmp 添加入 res 。

4.返回值: 返回打印结果列表 res 即可。

代码解析

class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        //存储当前层所有节点的队列
        Queue<TreeNode> queue = new LinkedList<>();
        //结果集
        List<List<Integer>> res = new ArrayList();

        //如果当前根节点不为空,则加入队列,开始执行流程
        if(root != null){
            queue.add(root);
        }
        //当队列非空(当前层数有节点没有执行深度优先遍历)时
        while(!queue.isEmpty()){
            //新建一个tmp队列
            List<Integer> tmp = new ArrayList();
            //执行循环
            //循环次数:每一层的节点的个数
            for(int i = queue.size(); i>0; i--){
                //队列弹出当前节点
                TreeNode currNode = queue.poll();
                //往队列中加入当前节点的左右子节点,构建下一层
                if(currNode.left != null){
                    queue.add(currNode.left);
                }
                if(currNode.right != null){
                    queue.add(currNode.right);
                }
                //临时队列中加入当前层的节点,构建当前层节点队列,加入结果集中
                tmp.add(currNode.val);
            }
            //加入结果集
            res.add(tmp);
        }
        //返回结果集
        return res;
    }
}


http://www.kler.cn/news/357521.html

相关文章:

  • 【无标题】vertex shader and fragment shader
  • 美摄科技云服务解决方案,方案成熟,接入简单
  • 从零开始搭建图像去雾神经网络(论文复现)
  • 多数元素问题
  • JAVA-石头迷阵小游戏
  • Windows 添加右键以管理员身份运行 PowerShell
  • 关于网络接口监测工具ifstat命令的功能详解以及Linux下lsof命令的使用详解
  • 前端面试题(十八)
  • 进程的优先级
  • Linux 外设驱动 应用 2 KEY 按键实验
  • 【Android】MVP架构
  • Qt-界面优化控件样式设置(72)
  • k8s的部署和安装
  • java 根据word模板,实现数据动态插入,包括二维码图片插入,并合并多个word文档,最终转为pdf导出
  • Java Exercise
  • ELK中segemntmerge操作对写入性能的影响以及控制策略和优化方法
  • JavaWeb合集05-SpringBoot基础知识
  • 设计模式03-装饰模式(Java)
  • 机器学习与物理学的相遇:诺贝尔奖新篇章的启示
  • LabVIEW伺服压机是如何实现压力位移的精度?