题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
思路分析
根据题目信息,就是对二叉树进行按层从左到右遍历,可以用队列存储结点对应的左右孩子结点,然后从队列中取出结点继续进行访问和加入孩子结点,直到队列为空,就是用队列来临时存放访问顺序就可以了;
从上到下打印二叉树的规律:每次打印一个节点的时候,如果该节点有子节点,则把该节点的子节点放到一个队列的末尾,接下来到队列的头部取出最早进入队列的节点,重复前面的打印操作,直到队列的所有节点都被访问;
代码实现
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
/**
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) {
if (root == null) {
return new ArrayList<>(0);
}
ArrayList<Integer> arrayList = new ArrayList<>();
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
TreeNode treeNode;
while (!queue.isEmpty()) {
treeNode = queue.poll();
arrayList.add(treeNode.val);
if (treeNode.left != null) {
queue.offer(treeNode.left);
}
if (treeNode.right != null) {
queue.offer(treeNode.right);
}
}
return arrayList;
}
}