题目描述:
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
package swordToOffer._22_PrintFromTopToBottom;
/*
思路:
题目已经导入了ArrayList包。我们用ArrayList创建一个集合List,将List当做队列存储TreeNode(难点和重点!!!)
每次都得到将队列头的第一个结点,将其左右结点都存入队列中,同时删除该第一个结点
至此队列中的结点按顺序就是从上至下,从左到右
* */
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
//用于存储最后的返回的value的集合
ArrayList<Integer> valueList = new ArrayList<Integer>();
//将List当做队列存储TreeNode
ArrayList<TreeNode> nodeQueue = new ArrayList<TreeNode>();
if (root == null) {
return valueList;
}
//将根节点加入Node队列
nodeQueue.add(root);
//开始按顺序存储每个结点
while (nodeQueue.size() > 0) {
//弹出并删除队列的第一个结点,这里一定要从队列中删除,也可以不用删除,用以下注释的方式
TreeNode node = nodeQueue.remove(0);
//判断是否有左右结点,有的话加入队列中,先左后右
if (node.left != null) {
nodeQueue.add(node.left);
}
if (node.right != null) {
nodeQueue.add(node.right);
}
//将node的value得到,加入返回的value结果集合中
valueList.add(node.val);
}
/*for(int i=0;i<nodeQueue.size();i++){
//依次弹出队列的第i个结点,这里没有从队列中删除
TreeNode node=nodeQueue.get(i);
//判断是否有左右结点,有的话加入队列中,先左后右
if(node.left!=null){
nodeQueue.add(node.left);
}
if(node.right!=null){
nodeQueue.add(node.right);
}
//将node的value得到,加入返回的value结果集合中
valueList.add(node.val);
}*/
return valueList;
}
}
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}