题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
样例:
8 / 6 10 / / 5 7 9 11
输出:8、6、10、5、7、9、11
解法
借助队列先进先出的特性,
先将根节点进入队列。
队头元素出队,将值存入 list,判断该元素是否有左/右子树,有的话依次进入队列中。队列为空时结束。
代码实现:
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 { /** * 从上到下打印二叉树 * @param root 二叉树根节点 * @return 结果list */ public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList<Integer> list = new ArrayList<>(); if (root == null) { return list; } Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); while (!queue.isEmpty()) { TreeNode node = queue.poll(); if (node.left != null) { queue.offer(node.left); } if (node.right != null) { queue.offer(node.right); } list.add(node.val); } return list; } }