package club.interview.tree; import club.interview.tree.base.TreeNode; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Queue; /** * 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。 * fixme https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof/ * <p> * 3 * / * 9 20 * / * 15 7 * <p> * [3 9 20 15 7] * <p> * 知识点扫盲 * 1. LinkedList是Queue的实现类 * 2. 出队入队的操作分别是 poll,offer * * @author QuCheng on 2020/6/3. */ public class BFSTree { private TreeNode buildNode() { TreeNode t1 = new TreeNode(15); TreeNode t2 = new TreeNode(7); TreeNode t3 = new TreeNode(20, t1, t2); TreeNode t4 = new TreeNode(9); return new TreeNode(3, t4, t3); } public static void main(String[] args) { BFSTree b = new BFSTree(); System.out.println(b.levelOrder(b.buildNode())); } /** * 列用队列FIFO的特性,遍历左右节点放入队列中,然后按层输出 */ public List<Integer> levelOrder(TreeNode root) { List<Integer> result = new ArrayList<>(); if (root == null) { return result; } Queue<TreeNode> temp = new LinkedList<>(); temp.offer(root); while (!temp.isEmpty()) { TreeNode treeNode = temp.poll(); result.add(treeNode.val); if (treeNode.left != null) { temp.offer(treeNode.left); } if (treeNode.right != null) { temp.offer(treeNode.right); } } return result; } }