【剑指offer】面试题32(1):从上往下不分行打印二叉树

柔情只为你懂 2022-06-11 01:16 159阅读 0赞

完整代码地址

完整代码地址

题目

从上往下打印出二叉树的每个节点,同层节点从左至右打印。

思路

很直观,用队列解决

代码

  1. public class _32_01_PrintTreeFromTopToBottom {
  2. public static class TreeNode {
  3. public int val = 0;
  4. public TreeNode left = null;
  5. public TreeNode right = null;
  6. public TreeNode(int val) {
  7. this.val = val;
  8. }
  9. }
  10. public static ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
  11. if(root == null)
  12. return new ArrayList<>();
  13. ArrayList<Integer> list = new ArrayList<>();
  14. Queue<TreeNode> queue = new LinkedList<>();
  15. queue.add(root);
  16. while(!queue.isEmpty()) {
  17. TreeNode node = queue.poll();
  18. list.add(node.val);
  19. if(node.left != null)
  20. queue.add(node.left);
  21. if(node.right != null)
  22. queue.add(node.right);
  23. }
  24. return list;
  25. }
  26. }

测试

  1. public class _32_01_Test {
  2. public static void main(String[] args) {
  3. test1();
  4. test2();
  5. test3();
  6. }
  7. /**
  8. * 功能测试
  9. * 1
  10. * / \
  11. * 2 3
  12. * / \ \
  13. * 4 5 6
  14. */
  15. private static void test1() {
  16. TreeNode root = new TreeNode(1);
  17. TreeNode node2 = new TreeNode(2);
  18. TreeNode node3 = new TreeNode(3);
  19. TreeNode node4 = new TreeNode(4);
  20. TreeNode node5 = new TreeNode(5);
  21. TreeNode node6 = new TreeNode(6);
  22. root.left = node2;
  23. root.right = node3;
  24. node2.left = node4;
  25. node2.right = node5;
  26. node3.right = node6;
  27. System.out.println(_32_01_PrintTreeFromTopToBottom.PrintFromTopToBottom(root));
  28. }
  29. /**
  30. * 边界测试
  31. * 1.只有一个节点
  32. * 2.每个节点都只有左子节点
  33. * 3.每个节点都只有右子节点
  34. */
  35. private static void test2() {
  36. TreeNode root = new TreeNode(1);
  37. System.out.println(_32_01_PrintTreeFromTopToBottom.PrintFromTopToBottom(root));
  38. TreeNode node2 = new TreeNode(2);
  39. TreeNode node3 = new TreeNode(3);
  40. root.left = node2;
  41. node2.left = node3;
  42. System.out.println(_32_01_PrintTreeFromTopToBottom.PrintFromTopToBottom(root));
  43. root.left = null;
  44. node2.left = null;
  45. root.right = node2;
  46. node2.right = node3;
  47. System.out.println(_32_01_PrintTreeFromTopToBottom.PrintFromTopToBottom(root));
  48. }
  49. /**
  50. * 极端测试
  51. * null
  52. */
  53. private static void test3() {
  54. System.out.println(_32_01_PrintTreeFromTopToBottom.PrintFromTopToBottom(null));
  55. }
  56. }

发表评论

表情:
评论列表 (有 0 条评论,159人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Offer-打印

    题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 解题思路:这道题是二叉树的层次遍历,如何实现一层一层的存储,这里就可以使用队列!将当前节点的左右子树存