【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) 的空间。

LeetCode题库地址