当前位置: 首页 > news >正文

二叉树的最小深度 Minimum Depth of Binary Tree

为什么80%的码农都做不了架构师?>>>   hot3.png

问题:

Given a binary tree, find its minimum depth.

The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.

解决:

① 本题要求求二叉树的最小深度,首先使用递归的解法。

public class Solution {//1ms
    public int minDepth(TreeNode root) {
        if(root == null) return 0;
        if(root.left == null) return minDepth(root.right) + 1;
        if(root.right == null) return minDepth(root.left) + 1;
        return Math.min(minDepth(root.left),minDepth(root.right)) + 1;
    }
}

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {//0ms
    public int minDepth(TreeNode root) {
        if(root == null) return 0;
        int left = minDepth(root.left);
        int right = minDepth(root.right);
        return (left == 0 || right == 0) ? left + right + 1: Math.min(left,right) + 1;
    }
}

② 使用非递归的方法,对二叉树进行BFS(广度优先搜索),由于是按层遍历的,因此如果在某一层发现了一个叶子节点,那么就找到了最小深度,此时返回当前深度即可。

public class Solution {//1ms
    public int minDepth(TreeNode root) {
        if(root == null) return 0;
        LinkedList<TreeNode> queue = new LinkedList();
        int level = 0;
        queue.add(root);
        while(! queue.isEmpty()){
            int levelLen = queue.size();
            level ++;
            for (int i = 0;i < levelLen ;i ++ ) {
                TreeNode node = queue.removeFirst();
                if(node.left == null && node.right == null) return level;
                if(node.left != null) queue.add(node.left);
                if(node.right != null) queue.add(node.right);
            }
        }
        return level;
    }
}

转载于:https://my.oschina.net/liyurong/blog/1503331

相关文章:

  • 告别ASP.NET操作EXCEL的烦恼(总结篇)
  • 一个简单RPC框架是怎样炼成的(VI)——引入服务注冊机制
  • UVa 123042D Geometry 110 in 1! [平面几何]
  • 【实用代码片段】将json数据绑定到html元素 (转)
  • HNUSTOJ 1516:Loky的烦恼
  • MySQL运维命令大全
  • 蓝盾股份增资参股云海麒麟 布局国产云计算业务
  • 2017年十大技术发展趋势概述
  • wxWidgets第十课 渲染字体
  • Centos x64 6.9下载地址
  • 十二个 ASP.NET Core 例子——1.1版本 EF MySql快速搭建
  • Kubernetes PodGC Controller源码分析
  • CodeMirror使用
  • Sencha Cmd 6 和 Ext JS 6 指南文档(部分官方文档中文翻译)
  • 给你的手机加上安全保障,请设置SIM卡PIN码
  • ➹使用webpack配置多页面应用(MPA)
  • create-react-app项目添加less配置
  • Docker入门(二) - Dockerfile
  • IDEA 插件开发入门教程
  • JavaScript 基础知识 - 入门篇(一)
  • javascript数组去重/查找/插入/删除
  • miaov-React 最佳入门
  • Python3爬取英雄联盟英雄皮肤大图
  • React 快速上手 - 07 前端路由 react-router
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • ViewService——一种保证客户端与服务端同步的方法
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 关于springcloud Gateway中的限流
  • 盘点那些不知名却常用的 Git 操作
  • 前端js -- this指向总结。
  • 前端面试题总结
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 温故知新之javascript面向对象
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • "无招胜有招"nbsp;史上最全的互…
  • #DBA杂记1
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (MATLAB)第五章-矩阵运算
  • (二十三)Flask之高频面试点
  • (接口封装)
  • (转)jQuery 基础
  • ***原理与防范
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .net MVC中使用angularJs刷新页面数据列表
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .Net6 Api Swagger配置
  • /bin、/sbin、/usr/bin、/usr/sbin
  • @RestController注解的使用
  • @SentinelResource详解
  • [ 蓝桥杯Web真题 ]-Markdown 文档解析