LeetCode 543-二叉树的直径

题目描述:

给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。

示例:

给定二叉树

LeetCode 543-二叉树的直径

返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。

注意:两结点之间的路径长度是以它们之间边的数目表示。

解答:

这道题是一个难度为简单的题目。开始的思路是只有经过根节点的路径才是最长的,那么这道题就是求根节点的左右子树的高度之和。于是代码如下:

go;gutter:true; /** * Definition for a binary tree node.</p> <ul> <li>type TreeNode struct {</li> <li>Val int</li> <li>Left *TreeNode</li> <li>Right *TreeNode</li> <li>} */</li> </ul> <p>func diameterOfBinaryTree(root <em>TreeNode) int { /</em> var lhight, rhight = 0, 0 if root == nil { return 0 }</p> <pre><code>if root.Left != nil { lhight = calHeight(root.Left) } if root.Right != nil { rhight = calHeight(root.Right) } if lhight > rhight { return lhight + rhight } else { return rhight + lhight } return 0 </code></pre> <p>}</p> <p>func calHeight(root *TreeNode) int { if root == nil { return 0 }</p> <pre><code>cnt := 0 lh := calHeight(root.Left) rh := calHeight(root.Right) if lh > rh { cnt = lh } else { cnt = rh } return cnt+1 </code></pre> <p>}</p> <pre><code> 但是最后并没有通过,无法通过下面这组用例。 ![LeetCode 543-二叉树的直径](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20230605/695616-20200201185741522-1759254025.png) 正确的结果应该是8对应的是 [-1 0 6 9 -9 -7 -6 9 -2] 这条路径。 ![LeetCode 543-二叉树的直径](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20230605/695616-20200201191309352-2016614757.png) 正确的方法是结合求二叉树高度的思路,我们只需要在求二叉树高度的代码中加入求最长路径的代码就可以了。 ;gutter:true;
/**
* Definition for a binary tree node.

* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/

var res int

func diameterOfBinaryTree(root *TreeNode) int {
res = 1 //初始的路径长度
calHeight(root)
return res-1
}

func calHeight(root *TreeNode) int {
if root == nil {
return 0
}

cnt := 0
lh := calHeight(root.Left) //左子树的长度
rh := calHeight(root.Right) //右子树的长度

if lh > rh {
cnt = lh
} else {
cnt = rh
}

if res < lh + rh + 1 { //lh+rh+1是本次遍历的路径的长度
res = lh + rh + 1 //更新res
}
return cnt+1
}

总结:

这道题并不难,但是我做了很久,主要是一开始的思路是错误的,然后我对二叉树的高度是如何求的也不是很熟悉,更多的是我的拖延和懒惰导致的。下次要注意。

Original: https://www.cnblogs.com/dennis-wong/p/12249885.html
Author: 成蹊0xc000
Title: LeetCode 543-二叉树的直径

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/582790/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Scipy

    1.Scipy简介 使用python做科学计算,详情参考官方文档 scipy软件包包含专用于科学计算中常见问题的各种工具箱,他的不同子模块对应于不同的应用程序,例如插值,积分,优化…

    Linux 2023年6月6日
    073
  • Debian 开机自动挂载磁盘

    首先要知道自己的磁盘是什么格式的, 常见的有 ext4 Fat32 ntfs exfat ntfs 和 exfat 磁盘格特殊说明, 因为需要额外支持才能挂载. 查看磁盘和分区的命…

    Linux 2023年6月7日
    095
  • pod(一):Kubernetes(k8s)创建pod的两种方式

    服务器版本 docker软件版本 CPU架构 CentOS Linux release 7.4.1708 (Core) Docker version 20.10.12 x86_64…

    Linux 2023年6月7日
    079
  • redis实战

    转载于:https://blog.csdn.net/piaoslowly/article/details/81563579 redis简介 Redis 是一个开源的 使用 ANSI…

    Linux 2023年5月28日
    089
  • Ubuntu常用命令

    Ubuntu(18.04)下更改用户名和主机名 更改主机名字: (1)修改hostname文件 这个文件中的内容是用来显示主机名的,修改这个文件后,立刻重启 (2)修改hosts文…

    Linux 2023年6月13日
    080
  • Windows 10 多用户同时远程登录

    win服务器版默认是支持多用户登陆的,甚至可以在主机上用不同用户自己远程登陆自己,如window server 2016。 Win10 正常情况下是不允许用户同时远程的,即一个用户…

    Linux 2023年6月14日
    0128
  • Centos7 安装部署Kubernetes(k8s)集群

    一.系统环境 二.前言 三.Kubernetes 3.1 概述 3.2 Kubernetes 组件 3.2.1 控制平面组件 3.2.2 Node组件 四.安装部署Kubernet…

    Linux 2023年6月7日
    092
  • 青春浙江微信平台如何退出?如何重新登录?微信如何清除浏览器缓存,如何清除浏览器cookies?

    青春浙江不能退出重新登录,有同学可能寻找解决方法,给大家贴出来:bug 解决办法:1. debugmm.qq.com/?forcex5=true 打开调试2. http://deb…

    Linux 2023年6月14日
    0121
  • 百钱买百鸡问题

    百钱买百鸡问题 题目:公元前5世纪末,中国古代数学家张丘建在他的《算经》中提出了著名的 “百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,…

    Linux 2023年6月7日
    098
  • mysql order by语句流程是怎么样的

    order by流程是怎么样的 注意点: select id, name,age,city from t1 where city=’&#x676D;&#x5DDE;…

    Linux 2023年6月8日
    0100
  • 不可不知的软件架构模式

    什么是系统架构(Architecture) 设计不仅仅指的是外观和感觉,它还包括运作方式。—— 史蒂夫·乔布斯 系统架构(System Architecture),软件架构(Sof…

    Linux 2023年6月14日
    073
  • Spring Boot 项目部署到 Linux服务器

    1.首先将SpringBoot项目打包成JAR包,然后通过FTP工具上传到Linux,执行如下命令: java -jar xxx.jar & 该命令执行后,启动jar,一旦…

    Linux 2023年6月14日
    064
  • 上篇:Go函数的骚包玩法有哪些

    1. 用type关键字可以定义函数类型,函数类型变量可以作为函数的参数或返回值。 package main import "fmt" func add(a, b…

    Linux 2023年6月7日
    083
  • 操作系统虚拟内存发展史

    404. 抱歉,您访问的资源不存在。 可能是URL不正确,或者对应的内容已经被删除,或者处于隐私状态。 [En] It may be that the URL is incorre…

    Linux 2023年5月27日
    0104
  • Tomcat下载安装以及配置方法

    Tomcat环境变量配置方法 注意一定要在java环境配置成功之后再来配置tomcat。我这里仅展现在Windows系统下载的安装方法 Tomcat下载地址如下: https://…

    Linux 2023年6月7日
    087
  • redis查看状态信息

    redis查看状态信息 info all|default Info 指定项 server服务器信息 redis_version : Redis 服务器版本 redis_git_sh…

    Linux 2023年5月28日
    094
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球