二叉树最大深度与最小深度

2023-05-16

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

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

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

示例:
给定二叉树 [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7
返回它的最大深度 3 。

 

第一个能想到的解法就是用递归求解,做完发现大部分人也都是用的递归思想,或者间接用的递归,也有用迭代法做的,主要记录一下递归就好了。

class Solution {
public:
    int maxDepth(TreeNode* root) {
        int L=0,R=0;
        if(root == NULL)
            return 0;
        else
        {    
            L = maxDepth(root->left);
            R = maxDepth(root->right);
            return (L>R?L:R)+1;
        }
    }
};

看见一个代码极度浓缩成一行的(java)

class Solution {
public:
    int maxDepth(TreeNode* root) {
        return (root==NULL)? 0:max(maxDepth(root->left),maxDepth(root->right))+1;
    }
};


作者:xia-gu-zhen-zhen

 

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

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

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

示例:

给定二叉树 [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7
返回它的最小深度  2.

 

 

本来以为这个题只需要改个条件就行了,没想到踩了一个坑,而且发现不止我一个人。

先前踩坑的代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    int minDepth(TreeNode* root) {
        int L=0,R=0;
        if(root == NULL)
            return 0;
        else
        {    
            L = minDepth(root->left);
            R = minDepth(root->right);
            return (L<R?L:R)+1;
        }
    }
};

                                                                                                                                                                                                           坑:在输入样例为【1,2】的时候,按照之前对题意的理解,生成的是一颗单支树 ,结果应该是这左右子树较小的那一颗的高度+1,但是这里预期输出却是2,看了一下大家的讨论,题意应该是要求在这种情况下,单支树的最小高度应该是这颗树的高度,而不是空子树的高度+1

在这里做出调整:
 

class Solution {
public:
    int minDepth(TreeNode* root) {
        int L=0,R=0;
        if(root == NULL)
            return 0;
        else
        {    
            L = minDepth(root->left);
            R = minDepth(root->right);
            return (L&&R)?(L<R?L:R)+1:L+R+1;
        }
    }
};

最后返回的时候,通过&运算,若其中一个空0,即出现单支树的情况,树的最小高度为L+R+1,这里因为有一颗子树为空,因此L+R+1实际上是求得单支树的高度加根结点,若不为空就返回两子树中较矮的一棵树的高度+1;

 

执行用时 :16 ms, 在所有 C++ 提交中击败了61.79%的用户

内存消耗 :19.5 MB, 在所有 C++ 提交中击败了86.14%的用户

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

二叉树最大深度与最小深度 的相关文章

随机推荐

  • TX2板 (ubuntu18.04系统)使用记录

    TX2板 ubuntu18 04系统 xff09 使用记录 一 TX2板 ubuntu18 04系统 xff09 更换国内软件源1 备份原软件源2 修改sources list文件3 更新 二 TX2板 ubuntu18 04系统 xff0
  • 海康威视相机标定、畸变矫正及AprilTag获取视觉标签三维信息

    海康威视相机标定 畸变矫正及AprilTag获取视觉标签三维信息 一 海康威视相机标定二 相机去畸变三 Apritag ros获得视觉标签的三维位置 一 海康威视相机标定 相机标定经调研共发现三种常用方式 xff1a 利用Matlab的ca
  • 如何切换Echarts主题

    一 打开Echarts官方文档 点击资源 gt 主题构建工具 进入到主题选择页面 二 选择默认主题 点击默认方案选择合适的主题 例如选择macarons xff0c 点击后右侧展示对应主题效果 三 应用主题 1 下载主题 点击下载主题 xf
  • C中strchr()函数用法

    strchr 函数包含于头文件 xff1a include lt stdio h gt 中 xff1b 函数原型为 xff1a char strchr char str char int c 函数功能为 xff1a 在字符串str中寻找字符
  • 切身经历,经理都慌了!云服务器连接成功蓝屏,桌面没有任何图标显示

    恢复了服务器数据 xff0c 结果服务器桌面任何东西都看不到了 xff0c 只有一个蓝色背景 xff0c 那一刻 xff0c 我心里是慌的 解决方案 xff1a 1 使用远程桌面 xff0c 输入您服务器IP地址登陆服务器 2 一个用户黑屏
  • KMP算法的理解

    串的模式匹配算法主要有两种 xff0c 一是简单模式匹配 xff0c 而是KMP算法 简单模式匹配算法很容易理解 xff0c 每一次从主串的第一个位置起和模式串的第一个字符开始比较 xff0c 如果相等就按照顺序一直比下去 xff0c 如果
  • 普利姆算法和克鲁斯卡尔算法求解最小生成树

    Q xff1a 最小生成树有什么用 xff1f A xff1a 譬如我要去五个城市旅游 xff0c 每两个城市之间可能有路也可能没有 xff0c 路的距离可能一样也可能不一样 xff0c 随机从一个城市出发 xff0c 我想要把每个城市走一
  • ES多个字段group by操作

    以下操作基于es6 8 第一种方式 这种方式查询出来的数据不是扁平化的 xff0c 而是一层套一层的 xff0c 比如字段一套字段二 GET 索引name 索引type search 34 size 34 0 34 aggregations
  • 整数反转

    给出一个 32 位的有符号整数 xff0c 你需要将这个整数中每位上的数字进行反转 示例 1 输入 123 输出 321 示例 2 输入 123 输出 321 示例 3 输入 120 输出 21 注意 假设我们的环境只能存储得下 32 位的
  • python批量爬取图片

    import requests import time import re 请求网页 header防止被禁止访问403 xff0c 伪装成浏览器 xff0c 不会被认为是python headers 61 39 User Agent 39
  • LeetCode罗马数字转整数

    罗马数字包含以下七种字符 I xff0c V xff0c X xff0c L xff0c C xff0c D 和 M 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如 xff0c 罗马数字 2 写做
  • STM32F407-跑马灯

    硬件准备 xff08 STM32F407ZGT6 xff09 1 初始准备 1 1打开Template模板 xff0c 在工程目录下新建HARDWARE文件夹 1 2 新建在HARDWARE路径中新建led c led h两个文件 xff0
  • LeetCode-括号匹配

    给定一个只包括 39 39 xff0c 39 39 xff0c 39 39 xff0c 39 39 xff0c 39 39 xff0c 39 39 的字符串 xff0c 判断字符串是否有效 有效字符串需满足 xff1a 左括号必须用相同类型
  • STM32F407-串口通信基本原理

    1 处理器与外部设备通信的两种方式 xff1a 并行通信 传输原理 xff1a 数据各个位同时传输 优点 xff1a 速度快 缺点 xff1a 占用引脚资源多 串行通信 传输原理 xff1a 数据按位顺序传输 优点 xff1a 占用引脚资源
  • STM32F407-串口数据传送

    一 串口基础 1 常用的串口相关寄存器 USART SR状态寄存器USART DR数据寄存器USART BRR波特率寄存器 2 串口操作相关库函数 xff08 省略入口参数 xff09 void USART Init 串口初始化 xff1a
  • 外观数组

    外观数列 是一个整数序列 xff0c 从数字 1 开始 xff0c 序列中的每一项都是对前一项的描述 前五项如下 xff1a 1 1 2 11 3 21 4 1211 5 111221 1 被读作 34 one 1 34 34 一个一 34
  • STM32F407-外部中断

    一 基本概念 STM32F4的每个IO都可以作为外部中断输入 STM32F4的中断控制器支持22个外部中断 事件请求 xff1a EXTI线0 15 xff1a 对应外部IO口的输入中断 EXTI线16 xff1a 连接到PVD输出 EXT
  • 杨辉三角①与②

    给定一个非负整数 numRows xff0c 生成杨辉三角的前 numRows 行 在杨辉三角中 xff0c 每个数是它左上方和右上方的数的和 示例 输入 5 输出 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 思路 xff1
  • wireshark 清空列表

    windows ctrl 43 shift 43 D mac ctrl 43 shift 43 D 操作后 xff1a
  • 二叉树最大深度与最小深度

    给定一个二叉树 xff0c 找出其最大深度 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数 说明 叶子节点是指没有子节点的节点 示例 xff1a 给定二叉树 3 9 20 null null 15 7 xff0c 3 9 20 15