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

广度优先搜索

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

假如存在一个如下二叉树,当我们遍历到第二层时,需要先保存元素 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;
    }
相关推荐
jarvisuni15 小时前
DeepSeekFlash前端依旧拉垮,而且变慢了很多!
前端·javascript·算法
杨运交15 小时前
[055][调度模块]Spring动态任务调度框架的设计与实现
java·后端·spring
kobesdu15 小时前
流形上的优化:SO(3)与SE(3)的广义加减法在FAST-LIO中如何简化状态估计
人工智能·算法·fastlio
白狐_79816 小时前
408 数据结构算法题 01:线性表暴力求解保分指南
java·数据结构·算法
流云鹤16 小时前
03Java学习day(3)
java·学习
乐观勇敢坚强的老彭16 小时前
C++信奥:开关门、开关灯问题
开发语言·c++·算法
冻柠檬飞冰走茶16 小时前
PTA基础编程题目集 7-31 字符串循环左移(C语言实现)
c语言·开发语言·数据结构·算法
tqs_1234516 小时前
Agent智能体+Skill插件引擎+Milvus混合检索 技术沉淀
java·python·milvus
Hi李耶16 小时前
【LeetCode】4-寻找两个正序数组的中位数
算法·leetcode·职场和发展
图灵机z16 小时前
【算法提高课】AcWing 1027. 方格取数 长期攻克提高课-day3(3/219)
算法