leetcode543 二叉树的直径

题目

给你一棵二叉树的根节点,返回该树的 直径 。
二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。
两节点之间路径的 长度 由它们之间边数表示。

示例

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

解析

这道题竟然标的是简单。。。也没那么简单吧,官方题解的那个视频将的比较好,想不明白了可以去看下视频。
要去求最大的啥啥啥,首先就得考虑设置一个变量来存最大值,这个是经常用到的思路。
然后如何计算直径,其实就是每个节点的左节点深度 + 右节点深度,比如有下面这颗二叉树:
leetcode543 二叉树的直径_第1张图片
4的深度是1,5的深度是1,2的深度是2,3的深度是1,1的深度是最大值2
而每个节点的对应的直径是:左子树的深度 + 右子树的深度,所以节点1的直径就是3
两个叶子节点的路径 = 根节点左右儿子的深度之和

func diameterOfBinaryTree(root *TreeNode) int {
	ans := 0
	var traversal func(node *TreeNode) int
	traversal = 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
}

你可能感兴趣的:(#,leetcode二叉树系列,数据结构,算法)