32.分行从上往下打印二叉树

从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层打印到一行。

数据范围:

树中节点的数量 [0,1000]。

样例:

输入如下图所示二叉树[8, 12, 2, null, null, 6, null, 4, null, null, null]
image
输出:[[8], [12, 2], [6], [4]]

代码:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public List<List<Integer>> printFromTopToBottom(TreeNode root) {
        //创建结果列表,用于存储按层序分组后的节点值
        List<List<Integer>>list = new ArrayList<>();
        //如果根节点为空,直接返回空列表
        if(root == null)return list;
        //使用队列辅助进行二叉树的层序遍历
        Queue<TreeNode>q = new LinkedList<>();
        //将根节点加入队列
        q.add(root);
        //当队列不为空时,继续处理
        while(!q.isEmpty()){
            //获取当前层的节点数量
            int n = q.size();
            //创建临时列表存储当前层的节点值
            List<Integer> temp = new ArrayList<>();
            //处理当前层的所有节点
            while(n>0){
                //取出队列头部节点
                TreeNode t = q.remove();
                //将当前节点的值加入临时列表
                temp.add(t.val);
                //如果当前节点有左子节点,将左子节点加入队列
                if(t.left!=null)q.add(t.left);
                //如果当前节点有右子节点,将右子节点加入队列
                if(t.right!=null)q.add(t.right);
                //当前层节点数减一
                n--;
            }
            //将当前层的节点值列表加入结果列表
            list.add(temp);
        }
        //返回按层序分组后的节点值列表
        return list;
    }
}
posted @ 2025-05-22 10:36  回忆、少年  阅读(6)  评论(0)    收藏  举报