essay

hot100-二叉树的直径

#算法

hot100——二叉树的直径

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

二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 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, 10410^4] 内

-100 <= Node.val <= 100

解法

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
 
func diameterOfBinaryTree(root *TreeNode) int {
    maxDiameter := 0
    depth(root, &maxDiameter)
    return maxDiameter
}
 
// 返回以 node 为根的子树的最大深度,并更新最大直径
func depth(node *TreeNode, maxDiameter *int) int {
    if node == nil {
        return 0
    }
    leftDepth := depth(node.Left, maxDiameter)
    rightDepth := depth(node.Right, maxDiameter)
 
    // 当前节点作为路径中间点时,路径长度为左深度+右深度
    if leftDepth+rightDepth > *maxDiameter {
        *maxDiameter = leftDepth + rightDepth
    }
 
    // 返回当前节点的深度(用于父节点计算)
    if leftDepth > rightDepth {
        return leftDepth + 1
    }
    return rightDepth + 1
}
comments如果有不同意见或者补充,直接留在这里。
contact

在别处继续找到我

如果你想聊技术、设计,或者只是打个招呼。

暂未配置外部链接