Java 求解二叉树的最小深度

我不是女神ヾ 2022-10-15 01:55 318阅读 0赞

文章目录

    • 一、题目
    • 二、题目分析
    • 三、递归分析
    • 四、迭代分析
    • 五、总结

一、题目

给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

说明:叶子节点是指没有子节点的节点。
在这里插入图片描述

二、题目分析

该题乍一看和求解最大深度类似,但是区别还是很大的

遍历顺序是后序遍历(因为要比较递归返回之后的结果)

需要注意处理节点时:
在这里插入图片描述

所以最小深度是从根到最近叶子节点的最短路径

叶子节点,左右孩子都为空的节点

三、递归分析

(1)确定递归函数的参数和返回值

参数即为二叉树节点,返回值即二叉树的深度

(2)确定递归终止条件

遇到空节点返回0,表示当前节点的高度为0

(3)确定单层递归的逻辑

叶子节点:左右节点均为空
所以,如果左子树不空,右子树为空,则说明最小深度是1+左子树的深度
所以,如果左子树为空,右子树不空,则说明最小深度是1+右子树的深度
所以,如果左右子树均不为空,或者左右子树均为空,则说明最小深度是左右子树最小值加1

  1. class Solution {
  2. public int minDepth(TreeNode root) {
  3. if (root == null) {
  4. return 0;
  5. }
  6. int leftDepth = minDepth(root.left);
  7. int rightDepth = minDepth(root.right);
  8. //左子树为空,右子树不为空,最小深度为 1+右子树的深度
  9. if (root.left == null && root.right != null) {
  10. return rightDepth + 1;
  11. }
  12. //左子树不为空,右子树为空,最小深度为 1+左子树的深度
  13. if (root.left != null && root.right == null) {
  14. return leftDepth + 1;
  15. }
  16. //左右子树均不为空,或者左右子树均为空,最小深度为左右子树的最小长度加1
  17. return Math.min(leftDepth, rightDepth) + 1;
  18. }
  19. }

四、迭代分析

利用层序遍历的思想:

  1. import java.util.Deque;
  2. import java.util.LinkedList;
  3. class Solution {
  4. public int minDepth(TreeNode root) {
  5. if (root == null) {
  6. return 0;
  7. }
  8. //记录最小深度
  9. int res = 0;
  10. int size = 0;
  11. Deque<TreeNode> deque = new LinkedList<>();
  12. TreeNode node;
  13. deque.add(root);
  14. while (!deque.isEmpty()) {
  15. size = deque.size();
  16. res++;
  17. while (size > 0) {
  18. size--;
  19. node = deque.poll();
  20. if (node.left != null) {
  21. deque.add(node.left);
  22. }
  23. if (node.right != null) {
  24. deque.add(node.right);
  25. }
  26. //当左右子树均为空时,到达叶子节点
  27. if (node.left == null && node.right == null) {
  28. return res;
  29. }
  30. }
  31. }
  32. return res;
  33. }
  34. }

五、总结

最大深度:左右子树的最大值加1

最小深度,需要注意是根节点到叶子节点的距离,需要分情况讨论:

如果左子树不空,右子树为空,则说明最小深度是1+右子树的深度
如果左子树为空,右子树不空,则说明最小深度是1+左子树的深度
如果左右子树均不为空,则说明最小深度是左右子树最小值加1

发表评论

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

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

相关阅读