【数据结构】二叉树-图解广度优先搜索

广度优先搜索

广度优先搜索就是基于 队列 去一层一层地遍历二叉树,最常见的方式就是层序遍历 ,使用的是迭代法 。假如每一层元素的值都用一个数组去存储,那么最终会是一个二维数组的形式。
为什么要基于队列去实现?

假如存在一个如下二叉树,当我们遍历到第二层时,需要先保存元素 4 与 7,再回过头遍历元素 4 底下的其他元素。也就是说我们需要用一个可以保存元素的容器 - 队列,借助它来保存每一层内我们遍历过的元素。

除了读取出元素并直接存入队列以外,还要维护一个 size 值,用于表示当前层的元素数量,借助 size 就可以准确从队列当中弹出对应数量的元素。接下来将以流程图形式展示层序遍历的流程:

代码实现:

java 复制代码
public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> res = new ArrayList<>();
        if(root == null) return res;
        
        Queue<TreeNode> nodeQueue = new LinkedList<>();
        nodeQueue.add(root);
        
        while(!nodeQueue.isEmpty()) {
            int size = nodeQueue.size();
            List<Integer> nodeList = new ArrayList<>(size);
            
            while(size > 0) {
                TreeNode temp = nodeQueue.poll();
                nodeList.add(temp.val);
                if(temp.left != null) nodeQueue.add(temp.left);
                if(temp.right != null) nodeQueue.add(temp.right);
                size--;
            }
            
            res.add(nodeList);
        }
        
        return res;
    }
相关推荐
敲代码的嘎仔19 分钟前
用 Redis 合并写 + DelayQueue 延迟检测,把视频播放进度写库频率降到 1/60
java·开发语言·数据库·redis·缓存·音视频·高并发
Q264336502336 分钟前
【有源码】基于机器学习的电信网络诈骗话术语义识别与可视化分析系统 XGBoost算法+Hadoop+Spark
大数据·hadoop·算法·机器学习·spark·毕业设计·课程设计
爱吃苹果的日记本36 分钟前
数据结构第三课补充(空间复杂度)
数据结构·学习
不会就选b1 小时前
算法日常・每日刷题--贪心<11>
算法·leetcode·职场和发展
多弗朗皮卡丘1 小时前
数据结构6:队列
c语言·数据结构
千里码aicood1 小时前
面向电商冷启动与数据稀疏性的协同过滤算法优化研究
大数据·算法·协同过滤
xxxiugou1231 小时前
双指针解题秘籍:从入门到精通
c语言·数据结构·c++·算法
能源革命1 小时前
TimesFM(Time Series Foundation Model)介绍
算法·能源
youyou-06061 小时前
AUTOSAR‑COM 常见问题 QA (1)
java·linux·服务器·单片机·汽车
谢亮_vipxieliang1 小时前
ValidX时间段验证详解:ISO 8601标准与简化格式
java·spring boot·后端·spring·spring cloud·hibernate