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

广度优先搜索

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

假如存在一个如下二叉树,当我们遍历到第二层时,需要先保存元素 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;
    }
相关推荐
Jerry1 分钟前
LeetCode 150. 逆波兰表达式求值
算法
浩瀚地学8 分钟前
【面试算法笔记】0106-数组-区间和
笔记·算法·面试
程序员爱钓鱼10 分钟前
Rust 常量与静态变量详解:const 与 static 的区别
后端
Jerry6 小时前
LeetCode 1047. 删除字符串中的所有相邻重复项
算法
可编程芯片开发8 小时前
基于霍尔传感器和PID控制器的有功功率检测控制系统simulink建模与仿真
算法
To_OC8 小时前
LC 17 电话号码的字母组合:我的回溯算法,就是从这道题开窍的
javascript·算法·leetcode
黒亱中旳9 小时前
Java AI 框架三国杀:Solon AI vs Spring AI vs LangChain4j 深度对比
java·人工智能·spring
网络工程小王9 小时前
[智能对话系统架构设计文档]
java·系统架构·langraph
alxraves9 小时前
医用超声远程会诊系统:会诊平台的核心架构与功能解析
java·人工智能·架构
带刺的坐椅9 小时前
用 Solon AI ReActAgent 落地智能客服工单处理
java·ai·llm·agent·solon·react-agent