283 字
1 分钟
LeetCode-543.二叉树的直径

二叉树#

543. 二叉树的直径

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

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

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


示例 1:

img

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

示例 2:

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

递归的解法

思路:可以认为是 所有节点中左右子树的深度和的最大值 or 不经过根节点的最大值

所以在求maxDepth时,维护一个全局的最大值maxDiameter即可,存储到达跟节点前的最大值

/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func diameterOfBinaryTree(root *TreeNode) int {
if root == nil {
return 0
}
maxDiameter := 0
var maxDepth func(*TreeNode) int
maxDepth = func(root *TreeNode) int {
if root == nil {
return 0
}
leftHeight := maxDepth(root.Left)
rightHeight := maxDepth(root.Right)
if leftHeight + rightHeight > maxDiameter {
maxDiameter = leftHeight + rightHeight
}
return max(leftHeight, rightHeight) + 1
}
maxDepth(root)
return maxDiameter
}
LeetCode-543.二叉树的直径
https://sheep44044.github.io/posts/算法/二叉树/leetcode-543二叉树的直径/
作者
sheep44044
发布于
2026-03-15
许可协议
CC BY-NC-SA 4.0