Leetcode:minimum_depth_of_binary_tree解决问题的方法

Leetcode:minimum_depth_of_binary_tree解决问题的方法

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

一、     称号

  并寻求最深的二元相似。给定的二进制树。求其最小深度。

最小深度是沿从根节点,到叶节点最短的路径。

二、     分析

  当我看到这个题目时。我直接将最深二叉树的代码略微改了下,把max改成min。本以为应该没有问题,谁知道WA了两次,我静下来看了看。最终知道了,当遇到有结点为NULL时就得要结束了。所下面次再简单的题目也要静下来好好分析,不然会easy出错。

 

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    int minDepth(TreeNode *root) {
        if(root==NULL) 
        	return 0;
        int mleft=minDepth(root->left);
        int mright=minDepth(root->right);
        if(mleft==0)
           return 1+mright;
        else if(mright==0)
           return 1+mleft;   
        else return min(mleft,mright)+1;
    }
};

二、

 
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */

class Solution {
public:
    int minDepth(TreeNode *root) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        return minRec(root);
    }
    
    int minRec( TreeNode * root) {
        if(!root) return 0;
        
        int left = minRec( root->left);
        int right = minRec( root->right);
        
        if(left && right) return 1 + min(left, right);
        if(left || right) return 1+left+right;
        return 1;
    }
};
三、

 
/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public int minDepth(TreeNode root) {
        // Start typing your Java solution below
        // DO NOT write main() function

        return minRec(root);
    }
    
    private int minRec(TreeNode root) {
        if(root==null) return 0;
        
        int l = minRec(root.left);
        int r = minRec(root.right);
        
        if(l==0) return r+1;
        if(r==0) return l+1;
        
        return Math.min(l, r) + 1;
        
    }
}

版权声明:本文博主原创文章,博客,未经同意不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/116848.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • ByteBuffer详解「建议收藏」

    ByteBuffer详解「建议收藏」一、前言前一篇文章我们介绍了Android中直播视频技术的基础大纲知识,这里就开始一一讲解各个知识点,首先主要来看一下视频直播中的一个重要的基础核心类:ByteBuffer,这个类看上去都知道了,是字节缓冲区处理字节的,这个类的功能非常强大,也在各个场景都有用到,比如网络数据底层处理,特别是结合网络通道信息处理的时候,还有就是后面要说到的OpenGL技术也要用到,当然在视频处理中也是很重要

  • PHP中unset,array_splice删除数组中元素的区别

    PHP中unset,array_splice删除数组中元素的区别

    2021年10月15日
  • Android使用系统签名以及安装[通俗易懂]

    Android使用系统签名以及安装[通俗易懂]在adt-bundle下编译APK,并进行Androidapk的系统签名.

  • js 判断一个 object 对象是否为空

    js 判断一个 object 对象是否为空js判断一个object对象是否为空转载原文判断一个对象是否为空对象,本文给出三种判断方法:1.最常见的思路,for…in…遍历属性,为真则为“非空数组”;否则为“空数组”for(variinobj){//如果不为空,则会执行到这一步,返回truereturntrue}returnfalse//如果为空,返回false2.通过JSON自带的s

  • c++ sstream

    c++ sstreamsstream定义了三个类:istringstream、ostringstream和stringstream分别用来进行流的输入、输出和输入输出操作由于sstream使用string对象代替字符数组,避免缓冲区溢出的危险;其次,因为传入参数和目标对象的类型会被自动推导出来,所以不存在错误的格式化符的问题。相比c库的数据类型转换,sstream更加安全、自动和直接。1.数据类型转换#inclu…

  • GiD 自定义 简介

    GiD 自定义 简介目录BlogLinks一、前言二、GiD的程序架构六、参考文献BlogLinksDalNur|博客总目录GiD实用教程GiD前处理实例GiD自定义简介GiD后处理实例一、前言  随着计算机技术的发展,有限元法已成为非常强大的数值模拟工具,广泛应用于各个领域。目前,比较常用的大型商用有限元程序有ANSYS,ABAQUS,MARC,ADINA等,由于它们是通用有限元程序,在某些领域的特殊方面(如对于应力场、渗流场、温度场的耦合问

    2022年10月23日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号