题目
给你一棵二叉树的根节点,返回该树的 直径 。
二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。
两节点之间路径的 长度 由它们之间边数表示。
示例
输入:root = [1,2,3,4,5]
输出:3
解释:3 ,取路径 [4,2,1,3] 或 [5,2,1,3] 的长度。
解析
这道题竟然标的是简单。。。也没那么简单吧,官方题解的那个视频将的比较好,想不明白了可以去看下视频。
要去求最大的啥啥啥,首先就得考虑设置一个变量来存最大值,这个是经常用到的思路。
然后如何计算直径,其实就是每个节点的左节点深度 + 右节点深度,比如有下面这颗二叉树:
4的深度是1,5的深度是1,2的深度是2,3的深度是1,1的深度是最大值2
而每个节点的对应的直径是:左子树的深度 + 右子树的深度,所以节点1的直径就是3
两个叶子节点的路径 = 根节点左右儿子的深度之和
func diameterOfBinaryTree(root *TreeNode) int {ans := 0var traversal func(node *TreeNode) inttraversal = func(node *TreeNode) int{if node == nil {return 0}left := traversal(node.Left)right := traversal(node.Right)ans = max(ans, left+right)return max(left, right) + 1}traversal(root)return ans
}func max[T int](a, b T) T {if a > b {return a}return b
}