首页 > 其他分享 >二叉树的广度优先遍历(力扣102)

二叉树的广度优先遍历(力扣102)

时间:2024-03-17 21:29:57浏览次数:22  
标签:遍历 TreeNode val 队列 力扣 que 二叉树 102 size


文章目录


题目

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

前知

BFS是什么?

树的广度优先遍历(BFS)是一种遍历树的方法,它从树的根节点开始,逐层遍历每个节点,直到遍历完所有的节点。BFS一般用队列来实现。

队列的基本操作有什么?

1.初始化一个队列Queue

Queue<TreeNode> que = new LinkedList<>();

2.入队

que.offer();

3.出队

que.poll();

4.查看队列的长度

que.size();

5.队列是否为空

que.isEmpty();

题解

一、思路

BFS迭代法,借助一个队列来实现每一层的遍历,将遍历过的元素的左右孩子重新添加到队尾,每一层数据都是一个一维数组,那整个树就是一个二维数组

102二叉树的层序遍历.gif

二、解题方法

用二维数组存放树每层的结点值,借用一个队列来一层一层的遍历结点,若树为空则直接返回,队列初始存放一个根节点,初始化一个一维数组,size记录下当前队列长度,当队列长度大于0时,出队队头结点,添加到存放每一层结点的一维数组里,判断出队的那个元素是否还有左右孩子,如果有就添加到队尾,最后size–,当size减为0时,将一维数组添加到二维数组里,再重新初始化一维数组,记录下size,继续第二层的遍历

三、Code

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> resList = new ArrayList<List<Integer>>();
        if(root == null){
            return resList;
        }
        Queue<TreeNode> que = new LinkedList<>();
        que.offer(root);
        
        while(!que.isEmpty()) {
            List<Integer> itemList = new ArrayList<>();
            int size = que.size();

            while(size>0){
                TreeNode tempNode =que.poll(); 
                itemList.add(tempNode.val);
                if(tempNode.left!=null){
                    que.offer(tempNode.left);
                }
                if(tempNode.right!=null){
                    que.offer(tempNode.right);
                }
                size--;
            }
            resList.add(itemList);
        }
        return resList;
    }
}

总结

以上就是针对这道题的刷题笔记,讲解了二叉树BFS需要借助一个队列来辅助一层一层的遍历,每一层数据都是一个一维数组,那整个树就是一个二维数组

标签:遍历,TreeNode,val,队列,力扣,que,二叉树,102,size
From: https://blog.csdn.net/Huahua_1223/article/details/136789834

相关文章

  • 树与二叉树(数据结构)
    本篇博客讲解树与二叉树,后续会继续讲解堆——————————————————————1.树概念及结构1.1树的概念 树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的......
  • Leecode 二叉树的前序遍历
    Day2刷题我的思路:用数组list存储遍历结果,利用ArrayList的方法实现嵌套!importjava.util.*;classSolution{//defininganarraylistpublicList<Integer>preorderTraversal(TreeNoderoot){List<Integer>Traversal=newArrayList<>();......
  • 力扣大厂热门面试算法题 39-41
    39.组合总和,40.组合总和II,41.缺失的第一个正数,每题做详细思路梳理,配套Python&Java双语代码,2024.03.17 可通过leetcode所有测试用例。目录39.组合总和解题思路完整代码PythonJava40.组合总和II解题思路完整代码PythonJava41.缺失的第一个正数解题思路完......
  • P10218 [省选联考 2024] 魔法手杖 题解
    Description给定\(a_1,a_2,\dots,a_n\)以及\(b_1,b_2,\dots,b_n\),满足\(a_i\in[0,2^k-1]\)以及\(b_i\geq0\),你需要给出\(S\subseteq\{1,2,\dots,n\}\)以及\(x\in[0,2^k-1]\)满足以下条件:\(\sum\limits_{i\inS}b_i\leqm\);满足以上条件的前提下,最大化\......
  • 【算法与数据结构】堆排序&&TOP-K问题之深入解析二叉树(三)
    文章目录......
  • 数据结构笔记(十四)二叉树的遍历(递归)
    四种访问方式:前序遍历,中序遍历,后序遍历,层序遍历这篇文章主要为前序,中序,后序遍历的递归形式,递归形式较为简单,后面更新遍历的循环形式较为复杂,建议使用递归形式#include<stdio.h>#include<stdlib.h>typedefcharE;typedefstructTreeNode*Node;structTreeNod......
  • 力扣周赛第01弹----思维 与 dp
    力扣周赛第01弹----思维与dp一、成为K特殊字符串需要删除的最少字符数题目给你一个字符串word和一个整数k。如果|freq(word[i])-freq(word[j])|<=k对于字符串中所有下标i和j都成立,则认为word是k特殊字符串。此处,freq(x)表示字符x在word中的出现频......
  • 【每日算法】常见AIGC模型; 刷题:力扣单调栈
    上期文章【每日算法】理论:生成模型基础;刷题:力扣单调栈文章目录上期文章一、上期问题二、理论问题1、stablediffusion模型的网络架构2、T5的网络架构(Text-To-TextTransferTransformer模型)3、SDXL模型4、DALLE5、BPE编码6、为什么DDPM加噪声的幅度是不一致的?三、力......
  • 面试中可能问到的几种树结构(二叉树,平衡二叉树,红黑树,B树和B+树)
    二叉树的概念二叉树是一种树形结构,其特点是每个结点至多只有两棵子树(即二叉树中不存在度大于2的结点),并且二叉树的子树有左右之分,其次序不能任意颠倒。平衡二叉树概念平衡二叉树,是二叉树的一种变形,左子树的深度和右子树的深度不能超过一。红黑树概念红黑树是一种自......
  • Offer必备算法14_哈希表_五道力扣题详解(由易到难)
    目录①力扣1.两数之和解析代码②力扣面试题01.02.判定是否互为字符重排解析代码③力扣217.存在重复元素解析代码④力扣219.存在重复元素II解析代码⑤力扣49.字母异位词分组解析代码本篇完。①力扣1.两数之和1.两数之和难度简单给定一个整数数组 nu......