1.题目描述
不分行从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如输入{8,6,10,#,#,2,1},如以下图中的示例二叉树,则依次打印8,6,10,2,1(空节点不打印,跳过),请你将打印的结果存放到一个数组里面,返回。
2.算法分析
题目要求从上到下打印二叉树。也就是数据结构中的二叉树的层次遍历。
很容易想到的是队列,这里使用两个ArrayList容器,一个是作为结果集,一个是作为模拟队列。
知识补充:ArrayList.remove(int index):删除这个index位置的元素。并将这个删除的元素返回出来。有接受的值,比如TreeNode temp =ArrayList.remove(int index );
具体看代码:
3.代码实现
import java.util.*;
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
// 属于二叉树的层次遍历,使用Queue队列
/*
1、public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>;
2、public interface Deque<E> extends Queue<E>
所以,LinkedList相当于是Queue的子类的子实现类
*/
public class Solution {
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
// 定义集合ArrayList存储结果集
ArrayList<Integer> result = new ArrayList<Integer>();
// 定义ArrayList存储的是二叉树结点
ArrayList<TreeNode> queue = new ArrayList<>();
if(root == null){
return result;
}
queue.add(root);
while(!queue.isEmpty()){
// 返回结点值,并删除位置元素。每次循环都会从队列中获取一个元素,然后添加到集合中
// 每次取的是集合中的第一个元素,模拟队列
TreeNode temp = queue.remove(0);
// 将第一个值存储到结果集中
result.add(temp.val);
if(temp.left != null){
queue.add(temp.left);
}
if(temp.right != null){
queue.add(temp.right);
}
}
return result;
}
}