当前位置:  首页>> 技术小册>> 数据结构与算法(下)

题目描述

从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

解法

与上一题类似,只不过需要用变量记录每一层要打印多少个节点。

  1. import java.util.ArrayList;
  2. import java.util.LinkedList;
  3. import java.util.Queue;
  4. /**
  5. * @author bingo
  6. * @since 2018/11/23
  7. */
  8. /*
  9. public class TreeNode {
  10. int val = 0;
  11. TreeNode left = null;
  12. TreeNode right = null;
  13. public TreeNode(int val) {
  14. this.val = val;
  15. }
  16. }
  17. */
  18. public class Solution {
  19. /**
  20. * 把二叉树打印成多行
  21. * @param pRoot 二叉树根节点
  22. * @return 结果list
  23. */
  24. ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
  25. ArrayList<ArrayList<Integer>> list = new ArrayList<>();
  26. if (pRoot == null) {
  27. return list;
  28. }
  29. Queue<TreeNode> queue = new LinkedList<>();
  30. queue.offer(pRoot);
  31. int cnt = 1;
  32. while (cnt > 0) {
  33. int num = cnt;
  34. cnt = 0;
  35. ArrayList<Integer> res = new ArrayList<>();
  36. for (int i = 0; i < num; ++i) {
  37. TreeNode node = queue.poll();
  38. if (node.left != null) {
  39. queue.offer(node.left);
  40. ++cnt;
  41. }
  42. if (node.right != null) {
  43. queue.offer(node.right);
  44. ++cnt;
  45. }
  46. res.add(node.val);
  47. }
  48. list.add(res);
  49. }
  50. return list;
  51. }
  52. }

测试用例

  1. 功能测试(完全二叉树;所有节点只有左/右子树);
  2. 特殊输入测试(二叉树根节点为空指针;只有一个节点的二叉树)。

该分类下的相关小册推荐: