【2022-09-02每日一题】687. 最长同值路径
2022-09-02
1分钟阅读时长
2022-09-02每日一题:687. 最长同值路径
- 难度:Medium
- 标签:树 、 深度优先搜索 、 二叉树
给定一个二叉树的 root
,返回 最长的路径的长度 ,这个路径中的 每个节点具有相同值 。 这条路径可以经过也可以不经过根节点。
两个节点之间的路径长度 由它们之间的边数表示。
示例 1:
输入:root = [5,4,5,1,1,5] 输出:2
示例 2:
输入:root = [1,4,5,4,4,5] 输出:2
提示:
- 树的节点数的范围是
[0, 104]
-1000 <= Node.val <= 1000
- 树的深度将不超过
1000
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func longestUnivaluePath(root *TreeNode) (ans int) {
var dfs func(*TreeNode) int
dfs = func (node *TreeNode) int {
if node == nil {
return 0
}
left, right := dfs(node.Left), dfs(node.Right)
left1, right1 := 0, 0
if node.Left != nil && node.Left.Val == node.Val {
left1 = left + 1
}
if node.Right != nil && node.Right.Val == node.Val {
right1 = right + 1
}
ans = max(ans, left1 + right1)
return max(left1, right1)
}
dfs(root)
return ans
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
复杂度分析
- 时间复杂度:O(n),其中 n 为树的结点数目。
- 空间复杂度:O(n)。递归栈最坏情况下需要 O(n) 的空间。