目录

二叉树的层序遍历-力扣102

二叉树的层序遍历 力扣102

一、题目

https://i-blog.csdnimg.cn/direct/ab3a2f93cb524aea87b7e51dd611db4a.png

二、思路

层序遍历是一种经典的二叉树遍历方法,通常使用队列来实现。具体步骤如下:

将根节点加入队列。

开始循环处理:

从队列中取出一个节点进行访问。

如果该节点有左子节点,则将左子节点入队。

如果该节点有右子节点,则将右子节点入队。

重复上述过程直到队列为空。

这样可以确保每一层的节点按顺序被访问,并且其子节点依次加入队列等待后续处理。

三、代码

class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
     //1.定义集合存放层序遍历的结果
        List<List<Integer>> resList = new ArrayList<List<Integer>>();
        if (root == null){
            return resList;
        }
        //2.创建队列
        Queue<TreeNode> que = new LinkedList<TreeNode>();
        que.offer(root);

        while (!que.isEmpty()) {
            List<Integer> itemList = new ArrayList<Integer>();
            int len = que.size();
            //这里是核心逻辑,这里的len其实是每一层的节点个数,一开始只有一个节点。
            //第一次循环只执行一次,将根节点的左右孩子加入到队列中时,此时len就会更新成孩子个数
            //所以,当len为0时,说明当前层遍历完了,此时再执行一次循环,就会遍历下一层的节点
            while (len > 0) {
                TreeNode tmpNode = que.poll();
                itemList.add(tmpNode.val);
                if (tmpNode.left != null) que.offer(tmpNode.left); //左孩子入队
                if (tmpNode.right != null) que.offer(tmpNode.right); //右孩子入队
                len--;
            }
            resList.add(itemList); //处理完一层,将这一层的结果加入到resList中
        }
        return resList;
    }
}