题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
思路解析
该题实质考察树的遍历算法。在掌握前序,后序和中序遍历(参考:
点击打开链接)的基础上做
这道题相对简单一些。伪算法如下:
第一步:根据按层打印的需求,先判断根节点是否为空,如果为空则返回空链表,如果不为空则执行第二步;
第二步:将该节点保存在一个队列(作为容器,队列具有先进先出的特点,先将跟节点放入容器,判断其左右子节点是否存在,如果存在,依次将左右子节点加入队列,这里需要保证属于同一个父节点的左右子节点在队列中存放的顺序是先左后右)中;
第三步:将队列中的值依次放入链表中,直到链表为空。实现代码如下所示:
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Deque;
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer> list = new ArrayList<Integer>();
if(root == null) return list;
Deque<TreeNode> deque = new LinkedList<TreeNode>();
deque.add(root);
while(!deque.isEmpty()){
TreeNode treenode = deque.pop();
list.add(treenode.val);
if(treenode.left != null) deque.add(treenode.left);
if(treenode.right != null) deque.add(treenode.right);
}
return list;
}
}
调试问题参考:
https://stackoverflow.com/questions/13243315/queue-is-abstract-cannot-be-instantiated#