• 全部
...

力扣每日一题day33[111. 二叉树的最小深度]|“朝闻道”知识分享大赛

726498 2023-12-10 21:34:46

这是我参加朝闻道知识分享大赛的第二十三篇文章 

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

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

说明:叶子节点是指没有子节点的节点。

示例 1:

 

输入:root = [3,9,20,null,null,15,7]
输出:2

示例 2:

输入:root = [2,null,3,null,4,null,5,null,6]
输出:5

本题依然是前序遍历和后序遍历都可以,前序求的是深度,后序求的是高度。

  • 二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数或者节点数(取决于深度从0开始还是从1开始)

  • 二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数后者节点数(取决于高度从0开始还是从1开始)

用后序遍历,其实求的是根节点到叶子节点的最小距离,就是求高度的过程,不过这个最小距离 也同样是最小深度。

递归法

来来来,一起递归三部曲:

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

参数为要传入的二叉树根节点,返回的是int类型的深度。

代码如下:

int getMinDepth(TreeNode root)

确定终止条件

终止条件也是遇到空节点返回0,表示当前节点的高度为0。

代码如下:

if(root==null) return 0;

确定单层递归的逻辑

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

右子树为空,左子树不为空,最小深度是 1 + 左子树的深度。 最后如果左右子树都不为空,返回左右子树深度最小值 + 1 。

  1. int leftDepth=getMinDepth(root.left);
  2. int rightDepth=getMinDepth(root.right);
  3. if(root.left==null&&root.right!=null){
  4. return 1+rightDepth;
  5. }
  6. if(root.left!=null&&root.right==null){
  7. return 1+leftDepth;
  8. }
  9. return 1+Math.min(leftDepth,rightDepth);
  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.        return getMinDepth(root);
  19.   }
  20.    int getMinDepth(TreeNode root){
  21.        if(root==null) return 0;
  22.        int leftDepth=getMinDepth(root.left);
  23.        int rightDepth=getMinDepth(root.right);
  24.        if(root.left==null&&root.right!=null){
  25.            return 1+rightDepth;
  26.       }
  27.        if(root.left!=null&&root.right==null){
  28.            return 1+leftDepth;
  29.       }
  30.        return 1+Math.min(leftDepth,rightDepth);
  31.   }
  32. }

迭代法

只有当左右都为空的时候,才说明遍历的最低点了。如果其中一个为空则不是最低点

代码:

  1. class Solution {
  2.    public int minDepth(TreeNode root) {
  3.        if(root==null) return 0;
  4.        int depth=0;
  5.        Queue<TreeNode> queue=new LinkedList<>();
  6.        queue.add(root);
  7.        while(!queue.isEmpty()){
  8.            int size=queue.size();
  9.            depth++;
  10.            for(int i=0;i<size;i++){
  11.                TreeNode cur=queue.poll();
  12.                if(cur.left!=null) queue.add(cur.left);
  13.                if(cur.right!=null) queue.add(cur.right);
  14.                if(cur.left==null&&cur.right==null) return depth;
  15.           }
  16.       }
  17.        return depth;
  18.   }
  19. }

 

...全文
给本帖投票
29 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

1,040

社区成员

发帖
与我相关
我的任务
社区描述
中南民族大学CSDN高校俱乐部聚焦校内IT技术爱好者,通过构建系统化的内容和运营体系,旨在将中南民族大学CSDN社区变成校内最大的技术交流沟通平台。
经验分享 高校 湖北省·武汉市
社区管理员
  • c_university_1575
  • WhiteGlint666
  • wzh_scuec
加入社区
社区公告

欢迎各位加入中南民族大学&&CSDN高校俱乐部社区(官方QQ群:908527260),成为CSDN高校俱乐部的成员具体步骤(必填),填写如下表单,表单链接如下:
人才储备数据库及线上礼品发放表单邀请人吴钟昊:https://ddz.red/CSDN
CSDN高校俱乐部是给大家提供技术分享交流的平台,会不定期的给大家分享CSDN方面的相关比赛以及活动或实习报名链接,希望大家一起努力加油!共同建设中南民族大学良好的技术知识分享社区。

注意:

1.社区成员不得在社区发布违反社会主义核心价值观的言论。

2.社区成员不得在社区内谈及政治敏感话题。

3.该社区为知识分享的平台,可以相互探讨、交流学习经验,尽量不在社区谈论其他无关话题。

试试用AI创作助手写篇文章吧

手机看
关注公众号

关注公众号

客服 返回
顶部