543. 二叉树的直径 简单

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

示例 :
给定二叉树

          1
         / \
        2   3
       / \     
      4   5    

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

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

代码参考:

package main

import "fmt"

func main() {
    root := &TreeNode{Val: 1}
    root.Left = &TreeNode{Val: 2}
    root.Right = &TreeNode{Val: 3}
    fmt.Println(diameterOfBinaryTree(root))
}

// 显然是找左子树最大路径与右子树最长路径
func diameterOfBinaryTree(root *TreeNode) int {
    var d int
    traverse(root, &d)
    return d
}

// 递归解法比较辣鸡
func traverse(root *TreeNode, maxD *int) {
    if root == nil {
        return
    }
    curD := depth(root.Left) + depth(root.Right)
    if curD > *maxD {
        *maxD = curD
    }

    traverse(root.Left, maxD)
    traverse(root.Right, maxD)
}

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

    lDepth := depth(root.Left) + 1
    rDepth := depth(root.Right) + 1
    if lDepth > rDepth {
        return lDepth
    }
    return rDepth
}
最后编辑: kuteng  文档更新时间: 2021-06-05 10:16   作者:kuteng