• 一、题目
  • 二、解题思路
  • 三、解题代码

    一、题目

    从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层打印一行。

    二、解题思路

    用一个队列来保存将要打印的结点。为了把二叉树的每一行单独打印到一行里,我们需要两个变量:一个变量表示在当前的层中还没有打印的结点数,另一个变量表示下一层结点的数目。

    三、解题代码

    1. public class Test {
    2. private static class BinaryTreeNode {
    3. private int val;
    4. private BinaryTreeNode left;
    5. private BinaryTreeNode right;
    6. public BinaryTreeNode() {
    7. }
    8. public BinaryTreeNode(int val) {
    9. this.val = val;
    10. }
    11. @Override
    12. public String toString() {
    13. return val + "";
    14. }
    15. }
    16. /**
    17. * 题目:从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层打印一行。
    18. * @param root
    19. */
    20. public static void print(BinaryTreeNode root) {
    21. if (root == null) {
    22. return;
    23. }
    24. List<BinaryTreeNode> list = new LinkedList<>();
    25. BinaryTreeNode node;
    26. // 当前层的结点个数
    27. int current = 1;
    28. // 记录下一层的结点个数
    29. int next = 0;
    30. list.add(root);
    31. while (list.size() > 0) {
    32. node = list.remove(0);
    33. current--;
    34. System.out.printf("%-3d", node.val);
    35. if (node.left != null) {
    36. list.add(node.left);
    37. next++;
    38. }
    39. if (node.right != null) {
    40. list.add(node.right);
    41. next++;
    42. }
    43. if (current ==0) {
    44. System.out.println();
    45. current = next;
    46. next = 0;
    47. }
    48. }
    49. }
    50. }