32.分行从上往下打印二叉树
从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层打印到一行。
数据范围:
树中节点的数量 [0,1000]。
样例:
输入如下图所示二叉树[8, 12, 2, null, null, 6, null, 4, null, null, null]
输出:[[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;
}
}


浙公网安备 33010602011771号