一、问题描述
1、描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
2、方法体
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
}
二、思路
简单描述就是同层打印,从上往下。
错误思路:在最开始考虑的是按层遍历,但是因为传入数据是一个TreeNode结点,没有办法用循环遍历,也不能使用递归调用的方法遍历。
所以,参考了牛客网的方法,用了Queue,每次访问Queue前端结点,如果有左右子树,那么存入Queue。然后打印当前结点。这种方法可以保证每个结点按照从上往下,从左往右的顺序存入队列,并且按照存入顺序取出。
三、反思
在做这道题目的时候没有培养敏感性,在考虑到按照一定顺序打印的时候,除了循环遍历,递归还应该考虑其他方式。重点是没有考虑到Queue。
四、代码
具体实现代码如下:
public class Solution {
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
//存放结果List
ArrayList<Integer> ansList = new ArrayList<Integer>();
LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(root);
while (!queue.isEmpty()) {
//获得queue的队首元素,并且从queue中删除
TreeNode node = queue.getFirst();
queue.pollFirst();
if (node==null){
return ansList;
}
ansList.add(node.val);
if (root.left != null) {
queue.add(node.left);
}
if (root.right != null) {
queue.add(node.right);
}
}
return ansList;
}