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

【LeetCode】543.二叉树的直径

题目

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

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

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

示例 1:

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

示例 2:

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

提示:

  • 树中节点数目在范围 [1, 10^4] 内
  • -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 {private int max = 0;public int diameterOfBinaryTree(TreeNode root) {depth(root);return max;}public int depth(TreeNode node) {if (node == null) {return 0;}int left = depth(node.left);int right = depth(node.right);max = Math.max(max, left + right);return Math.max(left, right) + 1;}
}

总结

按理还是以每个节点作输入进行递归,但是这道题没办法直接让递归返回的就是我们需要的结果。因为我们想要求的直径肯定包括一个节点(我们设为A)的左右两条边,但是递归再向上返回时,A节点的父节点只需要A的一条边。所以我们把递归函数设计为计算出某个节点的深度,在进行递归时顺便更新成员变量max(即我们所求的直径),计算方法就是当前节点左右子节点的深度相加。

http://www.lryc.cn/news/129367.html

相关文章:

  • TypeScript教程(五)条件语句,循环,函数
  • vue使用jsplumb 流程图
  • 【BASH】回顾与知识点梳理(二十八)
  • LangChain源码逐行解密之系统(二)
  • QT的设计器介绍
  • [LitCTF 2023]Ping
  • Spring Cloud面试突击班1
  • 线上售楼vr全景看房成为企业数字化营销工具
  • “深入探索JVM内部机制:解密Java虚拟机原理“
  • 最长 上升子序列
  • Nginx的介绍
  • [杂项]奥特曼系列影视列表大全
  • java代码日记--java 基础语法
  • Spring中的IOC与DI-细胞内物质与传递
  • 【探索Linux】—— 强大的命令行工具 P.5(yum工具、git 命令行提交代码)
  • jdbc 使用rewriteBatchedStatements=true后,报错
  • 第G1周:生成对抗网络(GAN)入门
  • Stable Diffusion基础:ControlNet之图片高仿效果
  • TCGA数据下载推荐:R语言easyTCGA包
  • JLSX 模版指令导出Excel
  • 【制作npm包3】了解 tsconfig.json 相关配置
  • 【0基础入门Python笔记】一、python 之基础语法、基础数据类型、复合数据类型及基本操作
  • 2023-08-18力扣每日一题
  • mac M1安装opencv方法及类型报错解决
  • Screen终端管理工具
  • 【python自动化办公】PysimpleGUI官网案例全部项目代码文件及运行截图
  • 9.处理this和防抖、节流
  • Spark操作Hive表幂等性探索
  • 【可变形卷积3】 DCNv2 安装
  • 归并排序 与 计数排序