题目地址(111. 二叉树的最小深度)

https://leetcode-cn.com/problems/minimum-depth-of-binary-tree/

题目描述

  1. 给定一个二叉树,找出其最小深度。
  2. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
  3. 说明:叶子节点是指没有子节点的节点。
  4. 示例 1
  5. 输入:root = [3,9,20,null,null,15,7]
  6. 输出:2
  7. 示例 2
  8. 输入:root = [2,null,3,null,4,null,5,null,6]
  9. 输出:5
  10. 提示:
  11. 树中节点数的范围在 [0, 105]
  12. -1000 <= Node.val <= 1000

前置知识


公司

  • 暂无

思路

使用迭代法层序遍历 遍历到第一个左右两个子节点都为空的即为二叉树的最小深度

关键点


代码

  • 语言支持:Java

Java Code:

  1. /**
  2. * Definition for a binary tree node.
  3. * public class TreeNode {
  4. * int val;
  5. * TreeNode left;
  6. * TreeNode right;
  7. * TreeNode() {}
  8. * TreeNode(int val) { this.val = val; }
  9. * TreeNode(int val, TreeNode left, TreeNode right) {
  10. * this.val = val;
  11. * this.left = left;
  12. * this.right = right;
  13. * }
  14. * }
  15. */
  16. class Solution {
  17. public int minDepth(TreeNode root) {
  18. Queue<TreeNode> queue = new LinkedList<>();
  19. int num = 0;
  20. if (root == null) {
  21. return num;
  22. }
  23. queue.offer(root);
  24. while (!queue.isEmpty()) {
  25. int size = queue.size();
  26. num++;
  27. while (size > 0) {
  28. TreeNode poll = queue.poll();
  29. //遍历到第一个左右两个子节点都为空的即为二叉树的最小深度
  30. if (poll.left == null && poll.right == null) {
  31. return num;
  32. }
  33. if (poll.left != null){
  34. queue.offer(poll.left);
  35. }
  36. if (poll.right != null){
  37. queue.offer(poll.right);
  38. }
  39. size--;
  40. }
  41. }
  42. return num;
  43. }
  44. }

复杂度分析

令 n 为数组长度。

  • 时间复杂度:111. 二叉树的最小深度 - 图1#card=math&code=O%28n%29&id=smZI7)
  • 空间复杂度:111. 二叉树的最小深度 - 图2#card=math&code=O%28n%29&id=bJwev)