剑指 Offer 32 - I. 从上到下打印二叉树

柔情只为你懂 2022-12-15 12:44 211阅读 0赞

题目

从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。

例如:
给定二叉树: [3,9,20,null,null,15,7],
在这里插入图片描述

返回:

[3,9,20,15,7]

提示:
节点总数 <= 1000

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof

解题思路

本质上就是二叉树的层序遍历,使用队列解决
注意点:
层序遍历获取到的值事先不知道size,所以需要使用一个ArrayList作为临时存储,然后在把ArrayList中的值赋值给数组

代码

  1. /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */
  2. class Solution {
  3. public int[] levelOrder(TreeNode root) {
  4. // 校验
  5. if (root == null) {
  6. return new int[0];
  7. }
  8. // 用来临时存储
  9. ArrayList<Integer> tempList = new ArrayList<>();
  10. // 队列
  11. LinkedList<TreeNode> queue = new LinkedList<>();
  12. queue.add(root);
  13. // 循环
  14. while (!queue.isEmpty()) {
  15. // 获取队列的size,循环
  16. int size = queue.size();
  17. while (size > 0) {
  18. TreeNode node = queue.poll();
  19. tempList.add(node.val);
  20. // 分别添加左子树和右子树到队列中
  21. if (node.left != null) {
  22. queue.add(node.left);
  23. }
  24. if (node.right != null) {
  25. queue.add(node.right);
  26. }
  27. size--;
  28. }
  29. }
  30. // 创建返回的数组,循环赋值
  31. int[] array = new int[tempList.size()];
  32. for (int i = 0; i < tempList.size(); i++) {
  33. array[i] = tempList.get(i);
  34. }
  35. return array;
  36. }
  37. }

发表评论

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

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

相关阅读