41.二叉树的层序遍历

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

示例1:
image

输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]

示例2:

输入:root = [1]
输出:[[1]]

示例3:

输入:root = []
输出:[]

提示:

  • 树中节点数目在范围 [0, 2000] 内
  • -1000 <= Node.val <= 1000

代码:

/**
 * 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<List<Integer>>list = new ArrayList<>();
        //如果根节点为null,直接返回空的list
        if(root == null)return list;
        //定义队列用于层序遍历
        Queue<TreeNode> q = new LinkedList<>();
        //将根节点加入队列
        q.add(root);
        //只要队列不为空就一直遍历
        while(!q.isEmpty()){
            //size记录当前队列中元素的个数
            int size = q.size();
            //定义一个列表用于存储当前层的节点数值
            List<Integer> cur = new ArrayList<>();
            //处理当前队列的所有节点,即当前层的节点  
            while(size>0){
                //取出队列中的节点
                TreeNode t = q.remove();
                //将当前节点的值存储cur列表
                cur.add(t.val);
                //如果当前节点的左孩子非空,将左孩子加入队列
                if(t.left!=null)q.add(t.left);
                //如果当前节点的右孩子非空,将右孩子加入队列
                if(t.right!=null)q.add(t.right);
                //要处理的节点个数减一
                size--;
            }
            //将cur存入list
            list.add(cur);
        }
        //返回list
        return list;
    }
}
posted @ 2025-04-28 11:09  回忆、少年  阅读(22)  评论(0)    收藏  举报