二叉树的直径,力扣

news2024/12/24 10:53:35

目录

题目地址:

题目:

我们直接看题解吧:

审题目+事例+提示:

解题方法:

难度分析:

解题方法分析:

解题分析:

补充说明:

代码优化:


题目地址:

543. 二叉树的直径 - 力扣(LeetCode)

难度:简单

今天刷二叉树的直径,大家有兴趣可以点上面链接,看看题目要求,试着做一下。

题目:

给你一棵二叉树的根节点,返回该树的 直径 。

二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。

两节点之间路径的 长度 由它们之间边数表示。

我们直接看题解吧:

审题目+事例+提示:

二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。

两节点之间路径的 长度 由它们之间边数表示。

解题方法:

方法为  深度搜索(DFS)

难度分析:

主要难在边与节点的关系,求直径即求路径长度,关键在求边

解题方法分析:

树的遍历方式总体分为两类:深度优先搜索(DFS)、广度优先搜索(BFS)。

常见 DFS : 先序遍历、中序遍历、后序遍历。

相关解题文章链接:

二叉树的前序遍历,力扣-CSDN博客

二叉树的中序遍历,力扣-CSDN博客

二叉树的中序遍历,力扣-CSDN博客

常见 BFS : 层序遍历(即按层遍历)。

相关解题文章链接:

二叉树的层序遍历,力扣-CSDN博客

求二叉树的最大深度

二叉树的最大深度,力扣-CSDN博客

解题分析:

首先我们知道

一条路径的长度为该路径经过的节点数-1即边数,

所以求直径(即求路径长度的最大值)等效于

求路径经过节点数的最大值-1。

而任意一条路径均可以被看作由某个节点为起点,从其左儿子和右儿子向下遍历的路径拼接得到。

如图我们可以知道路径 [9, 4, 2, 5, 7, 8] 可以被看作以 2 为起点,从其左儿子向下遍历的路径 [2, 4, 9] 和从其右儿子向下遍历的路径 [2, 5, 7, 8] 拼接得到。

假设我们知道对于该节点的左儿子向下遍历经过最多的节点数 L(即以左儿子为根的子树的深度)和其右儿子向下遍历经过最多的节点数 R (即以右儿子为根的子树的深度),那么以该节点为起点的路径经过节点数的最大值即为 L+R+1(1即该节点) 。

我们记节点 node 为起点的路径经过节点数的最大值为dnode,

那么二叉树的直径就是所有节点dnode的最大值-1即边数。

解题思路:

1、设一个全局变量 ans 记录 dnoded的最大值

2、定义递归函depth(node) 计算 dnoded(函数返回该节点为根的子树的深度)

           ·设置终止递归,访问到空节点,即node=null,则返回0

           ·递归调用左右儿子分别求得它们为根的子树的深度 L 和 R,

           ·更新ans,即该节点的 dnoded值为L+R+1

           ·返回该节点为根的子树的深度即为max(L,R)+1

代码实现:

class Solution {
    int ans;    //设一个全局变量ans记录节点数的最大值
    public int diameterOfBinaryTree(TreeNode root) {
        ans = 1;
        depth(root);
        return ans - 1;  //节点数-1,即边数
    }
    public int depth(TreeNode node) {
        if (node == null) {
            return 0; // 访问到空节点了,返回0
        }
        int L = depth(node.left); // 左儿子为根的子树的深度
        int R = depth(node.right); // 右儿子为根的子树的深度
        ans = Math.max(ans, L+R+1); // 计算d_node即L+R+1 并更新ans
        return Math.max(L, R) + 1; // 返回该节点为根的子树的深度
    }
}

补充说明:

1、变量ans初始化为1,方便返回-1操作,当该树为空树时,边数为0

2、 在递归函数中,注意返回的是该节点为根的子树深度,而整棵数的直径为全局变量ans-1

3、可能有朋友已经发现代码里面的-1,+1操作有些脱裤子放屁之意,不过这样子其实有助于我们理解路径规律与解题思路

代码优化:

上面通过节点数让我们更好的理解路径的规律与求路径的思路方法,即通过点获取边 。

接下来,我们直接通过求边即可

class Solution {
    int maxd=0;//定义全局变量,初始化为0
    public int diameterOfBinaryTree(TreeNode root) {
        depth(root);
        return maxd;
    }
    public int depth(TreeNode node){
        if(node==null){
            return 0;
        }
        int Left = depth(node.left);
        int Right = depth(node.right);
        maxd=Math.max(Left+Right,maxd);//将每个节点最大直径(左子树深度+右子树深度)
                                           // 与当前最大值比较并取大者
        return Math.max(Left,Right)+1;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1360026.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

​电脑技巧:​笔记本电脑电流声的原因和解决方案

目录 一、音频设备接口接触不良 二、笔记本电源问题 三、笔记本电脑驱动程序问题 四、音频硬件问题 五、操作系统内部电磁干扰 六、最后总结 大家在日常生活当中,笔记本电脑已经成为我们工作、学习和娱乐的重要工具。但有时我们在使用过程中可能会遇到一个令人…

MySQL-数据库概述

数据库相关概念: 数据库(DateBase)简称DB,就是一个存储数据的仓库,数据有组织的进行存储。 数据库分为关系型数据库简称RDBMS和非关系型数据库 关系型数据库简称RDBMS:建立在关系模型的基础上,由多张相互连接的二维表组成的数据库.简单来说…

项目整合积木报表-设计页面

项目整合积木报表-设计页面 <template><div><iframe id"dome" :srcsrc ></iframe></div> </template><script>export default {data(){return{src:configSrc.src"/jmreport/view/836138868821839872"}}} </…

CentOS 7.6下的HTTP隧道代理配置详解

在CentOS 7.6操作系统中&#xff0c;配置HTTP隧道代理需要一定的技术知识和经验。下面我们将详细介绍如何配置HTTP隧道代理&#xff0c;以确保网络通信的安全性和稳定性。 首先&#xff0c;我们需要了解HTTP隧道代理的基本原理。HTTP隧道代理是一种通过HTTP协议传输其他协议数…

Android 正圆

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"wrap_content"android:layout_height"wrap_content"android:padding&…

遥感影像-语义分割数据集:山体滑坡数据集详细介绍及训练样本处理流程

原始数据集详情 简介&#xff1a;该遥感滑坡数据集由卫星光学图像、滑坡边界的形状文件和数字高程模型组成。该数据集中的所有图像&#xff0c;即770张滑坡图像&#xff08;红点&#xff09;和2003张非滑坡图像&#xff0c;都是从2018年5月至8月拍摄的TripleSat卫星图像中截取…

NGUI基础-三大基础控件之Sprite精灵图片

目录 Sprite是什么 如何创建Sprite 参数相关 Atlas Sprite Material Fixed Aspect Type Simple(普通模式&#xff09; Sliced(切片模式&#xff09; Tiled(平铺模式&#xff09; Filled(填充模式&#xff09; 常见的填充模式有以下几种&#xff1a; Advanced(高级…

Java IO知识点

1. Java IO IO&#xff0c;即输入&#xff08;in&#xff09;和输出&#xff08;out&#xff09;&#xff0c;指应用程序和外部设备之间的数据传递&#xff0c;常见的外部设备包括文件、管道、网络连接。Java 中是通过流处理 IO 的&#xff0c; 那么什么是流&#xff1f; 流…

AcWing 861. 二分图的最大匹配—匈牙利算法

题目链接:AcWing 861. 二分图的最大匹配 问题描述 分析 该题是一道典型的二分图匹配模板题&#xff0c;求解最大匹配数&#xff0c;可以用匈牙利算法来解决&#xff0c;下面举一个例子来说明匈牙利算法是如何运行的 以该图为例&#xff0c;其中 1可以匹配a,c 2可以匹配a,b 3…

Docker-Compose部署Redis(v7.2)哨兵模式

文章目录 一、前提准备1. 主从集群2. 文件夹结构 二、配置文件1. redis server配置文件2. redis sentinel配置文件3. docker compose文件 三、运行四、测试 环境 docker desktop for windows 4.23.0redis 7.2 一、前提准备 1. 主从集群 首先需要有一个redis主从集群&#x…

C++ 实现对战AI五子棋

个人主页&#xff1a;日刷百题 系列专栏&#xff1a;〖C/C小游戏〗〖Linux〗〖数据结构〗 〖C语言〗 &#x1f30e;欢迎各位→点赞&#x1f44d;收藏⭐️留言&#x1f4dd; ​ ​ 前言&#xff1a; 为了能够快速上手一门语言&#xff0c;我们往往在学习了基本语法后&#x…

【自学笔记】01Java基础-09Java关键字详解

介绍java&#xff08;基于java11&#xff09;中所有关键字&#xff0c;以及主要重要的关键字详解。 1 Java 11中的关键字&#xff1a; 1.1 类型声明与变量定义 boolean&#xff1a;声明布尔类型变量&#xff0c;只有两个可能值 true 或 false。byte&#xff1a;声明一个8位有…

[UUCTF 2022 新生赛]ez_rce

[UUCTF 2022 新生赛]ez_rce wp 在做这道题时&#xff0c;我参考了这篇博客&#xff1a; https://www.cnblogs.com/bkofyZ/p/17594549.html 认识到了自己的一些不足。 题目代码如下&#xff1a; <?php ## 放弃把&#xff0c;小伙子&#xff0c;你真的不会RCE,何必在此纠…

实验笔记之——基于COLMAP的Instant-NGP与3D Gaussian Splatting的对比

之前博客进行了COLMAP在服务器下的测试 实验笔记之——Linux实现COLMAP-CSDN博客文章浏览阅读794次&#xff0c;点赞24次&#xff0c;收藏6次。学习笔记之——NeRF SLAM&#xff08;基于神经辐射场的SLAM&#xff09;-CSDN博客NeRF 所做的任务是 Novel View Synthesis&#xf…

静态网页设计——个人兴致小屋(HTML+CSS+JavaScript)

前言 使用技术&#xff1a;HTMLCSSJS 主要内容&#xff1a;对个人兴致的一些介绍&#xff0c;画风优美。 主要内容 1、首页 首页是一个优美的背景加一句欢迎来到xxx的兴致小屋&#xff0c;可将XXX改成自己。点击确定可以跳到主页。 部分代码&#xff1a; <body><…

接口自动化-allure测试报告

学习目标&#xff1a; 1、测试报告的作用 2、allure的安装 3、allure的基本使用 4、allure的高级使用 学习内容&#xff1a; 1、测试报告的作用 自动化接口的结果呈现虽然可以通过日志文件去查看用例的成功或者失败&#xff0c;但是这样的结果就是不美观&#xff0c;不能…

外包干了3个多月,技术退步明显。。。。。

先说一下自己的情况&#xff0c;本科生生&#xff0c;19年通过校招进入广州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测…

阿里云大模型「让照片跳舞」刷屏朋友圈,有哪些信息值得关注?

介绍 大家好&#xff0c;我分享聊聊阿里通义千问APP中全民舞王功能。 网络热舞结合AI视频&#xff0c;这是以后不用学习跳舞&#xff1f; 可以尝试下效果&#xff0c;一张图片生成视频。 APP快速使用 搜索下载通义千问APP 打开APP&#xff0c;选中一张照片来跳舞。 这里…

Halcon算子精讲:形态学操作(圆形操作)

膨胀操作&#xff08;圆形膨胀&#xff09; 算子 dilation_circle(Region, RegionDilation, 3.5) 原理 将区域中边界的每个像素点以3.5为半径做圆&#xff0c;原有区域 所做圆区域 膨胀后区域。 作用 扩大目标所在区域或连接区域破碎部分。 对比图 腐蚀操作&#xff08;圆…

陀螺研究院发布《中国产业区块链生态图谱 2024版》

从发展实践来看&#xff0c;产业区块链在我国已历经了4年的高速发展&#xff0c;发展至今&#xff0c;我国区块链发展环境基本夯实&#xff0c;形成了技术突破与应用拓宽的创新土壤&#xff0c;围绕区块链为主体的产业链条不断纵深延伸&#xff0c;在基础设施支撑、融合创新拓展…