leecode刷题 二叉树的直径

简介: 给定一棵二叉树的根节点,返回该树的直径。二叉树的直径是指树中任意两个节点之间最长路径的长度,这条路径可能经过也可能不经过根节点。两节点之间路径的长度由它们之间边数表示。

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

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

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

示例 1:
image.png

输入:root = [1,2,3,4,5]
输出:3
解释:3 ,取路径 [4,2,1,3] 或 [5,2,1,3] 的长度。
示例 2:

输入:root = [1,2]
输出:1

提示:

树中节点数目在范围 [1, 104] 内
-100 <= Node.val <= 100

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    int max=0;
  public int diameterOfBinaryTree(TreeNode root) {
        if (root == null) return 0;
        deep(root);
        return max;
    }

    private int deep(TreeNode root) {
        if (root == null) return 0;
        // 递归计算左子树和右子树的最大深度
        int leftDepth = deep(root.left);
        int rightDepth = deep(root.right);
        max=Math.max(max,leftDepth+rightDepth);
        // 当前节点的最大深度是左子树和右子树深度的最大值加一
        return 1 + Math.max(leftDepth, rightDepth);
    }
}

我陷入了一个死胡同,认为只要求出左子树的最大深度+右子树的最大深度,就可以得出直径,这就存在一个误区,就是直径的路径不一定存在在根节点的一级子树中,如下图所示,直径路径存在在-9为根节点的子树中,所以必须递归对子树的直径进行更新,即要寻找的是这棵树中左右子树相加最大的值,而不是直接求左右子树的深度。

image.png

相关文章
|
6月前
|
存储 机器学习/深度学习 人工智能
告别信息焦虑,用这个国产AI工具做知识管理,大脑终于解放了
文章介绍了纳米AI知识库作为“第二大脑”的强大功能。它能高效管理海量信息,支持54种文件格式上传,自动提取关键数据并打标签,轻松整合工作与生活中的碎片化信息。通过场景测试显示,在工作和生活中,纳米AI可快速生成报告、提供精准数据,极大提升效率。其共享机制还促进了团队协作,释放了创造力,让用户从琐碎事务中解脱,专注于深度思考与创新。
|
1月前
|
JSON 监控 API
掌握使用 requests 库发送各种 HTTP 请求和处理 API 响应
本课程全面讲解了使用 Python 的 requests 库进行 API 请求与响应处理,内容涵盖环境搭建、GET 与 POST 请求、参数传递、错误处理、请求头设置及实战项目开发。通过实例教学,学员可掌握基础到高级技巧,并完成天气查询应用等实际项目,适合初学者快速上手网络编程与 API 调用。
362 130
|
2月前
|
机器学习/深度学习 人工智能 PyTorch
GPT为定制AI应用工程师转型第一周学习计划
本计划帮助开发者快速入门AI领域,首周涵盖AI基础理论、Python编程及PyTorch实战。前两天学习机器学习、深度学习与Transformer核心概念,掌握LLM工作原理。第三至四天快速掌握Python语法与Jupyter使用,完成基础编程任务。第五至七天学习PyTorch,动手训练MNIST手写识别模型,理解Tensor操作与神经网络构建。
175 0
|
开发者 人工智能 自然语言处理
欢迎使用通义灵码
灵码使用指南!一键收藏。
134638 0
|
2月前
|
缓存 JSON 数据库
检验你的fastapi掌握了吗
本内容系统讲解了 FastAPI 的核心功能与高级应用,包括路径参数定义、类型验证、Pydantic 模型、依赖注入、异步处理、权限校验、CORS 配置、错误处理、文档生成及性能优化等内容,适用于构建高效、可维护的现代 Web API 服务。
121 7
|
2月前
|
Shell 网络安全 开发工具
项目快速导入git
本文介绍了如何在本地初始化 Git 仓库并将代码提交到远程仓库(如 GitHub 或 Gitee)的基本流程。内容包括安装 Git、创建仓库、添加文件、提交更改以及推送代码到远程仓库的详细步骤,适合初学者快速掌握 Git 的基本使用方法。
127 1
|
7月前
|
SQL 数据库 数据安全/隐私保护
Umbraco CMS 一键启动
**Umbraco 项目创建指南**您可以快速搭建并运行一个基于 Umbraco 的网站。
166 7
|
6月前
|
消息中间件 人工智能 API
100行代码讲透MCP原理
本文通过100行代码看到MCP的核心原理并不复杂,但它的设计巧妙深入理解使我们能够超越简单的SDK使用,创建更强大、更灵活的AI应用集成方案。
1323 61
100行代码讲透MCP原理