1、题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
2、思路
利用队列做结点容器,将节点从尾部放入队列(刚开始是根节点),将队列头部的节点弹出的同时,将该节点的左、右孩子从尾部放入队列;重复前面的步骤,直到队列为null。
3.代码如下
import java.util.ArrayList;
import java.util.Queue;
import java.util.LinkedList;
/**
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>();//将树中各个节点的值存入list中
if(root == null){//如果二叉树不存在,则返回null
return list;
}
Queue<TreeNode> queue = new LinkedList<TreeNode>();//LinkedList是Queue的实现类
queue.offer(root);//将当前节点放入队列中
while(!queue.isEmpty()){
TreeNode node = queue.poll();//从队列中弹出节点
list.add(node.val);
if(node.left != null){
queue.offer(node.left);//将当前的左节点放入队列中
}
if(node.right != null){
queue.offer(node.right);//将当前的右节点放入队列中
}
}
return list;
}
}