687. 最長同值路徑

WrRan發表於2024-09-11
題目連結 687. 最長同值路徑
思路 “樹的直徑”的簡單變體
題解連結 【影片】徹底掌握直徑 DP!從二叉樹到一般樹!(Python/Java/C++/Go)
關鍵點 注意維護當前狀態:當左二子的值與本節點值不同時,要更新\(v_{l} = 0\)
時間複雜度 \(O(n)\)
空間複雜度 \(O(n)\)

程式碼實現:

class Solution:
    def longestUnivaluePath(self, root: Optional[TreeNode]) -> int:
        answer = 0
        def dfs(node):
            if node is None:
                return -1
            l_len = dfs(node.left) + 1
            r_len = dfs(node.right) + 1
            if node.left and node.left.val != node.val:
                l_len = 0
            if node.right and node.right.val != node.val:
                r_len = 0
            nonlocal answer
            answer = max(answer, l_len + r_len)
            return max(l_len, r_len)
        
        dfs(root)
        return answer

相關文章