要求:从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
思路:与上题相似,使用BFS,其中将本层全部节点打印到一行,并将下一层全部节点加入队列,以此类推,即可分为多行打印
// 分行从上到下打印二叉树
public ArrayList<ArrayList<Integer>> printFromTopToBottom(TreeNode0 root){
ArrayList<ArrayList<Integer>> res = new ArrayList<>();
Queue<TreeNode0> queue = new LinkedList<>();
if(root!=null)queue.add(root);
while(!queue.isEmpty()){
ArrayList<Integer> temp = new ArrayList<>(); // 用于存放每一层的节点的值
// 队列中存储了多少个节点,都遍历出来,相当于每一层的节点给遍历出来
for(int i=queue.size(); i>0; i--){
TreeNode0 node = queue.poll(); // queue取出一个节点
temp.add(node.value); // 节点值加入到列表中
if(node.left!=null)queue.add(node.left);
if(node.right!=null)queue.add(node.right);
}
res.add(temp); // 把该层的列表加入到输出结果的链表中。
}
return res; // 输出结果
}
网友评论