Leetcode 3203. Find Minimum Diameter After Merging Two Trees

  • [Leetcode 3203. Find Minimum Diameter After Merging Two Trees](#Leetcode 3203. Find Minimum Diameter After Merging Two Trees)
    • [1. 解题思路](#1. 解题思路)
    • [2. 代码实现](#2. 代码实现)

1. 解题思路

这一题的话算是一个拓扑树的题目?总之就是从树的叶子节点不断向上遍历,不断地删除已访问的叶子节点,并加入更新之后的新的叶子节点,这样我们就能得到树的最大深度,然后在遍历过程中我们考察其任意节点上的当前深度和已有深度的和的最大值,即为经过该节点的最大路径长度,遍历整张图,我们即刻获得整个树的深度和diameter。然后,我们要连接两个图的话,能够获得的最大路径长度就是两个图的深度之和加一。

由此,我们即可完成这道题目了。

2. 代码实现

给出python代码实现如下:

python 复制代码
class Solution:
    def minimumDiameterAfterMerge(self, edges1: List[List[int]], edges2: List[List[int]]) -> int:
        
        def dfs(edges):
            if edges == []:
                return 0, 0
            diameter = 0
            graph = defaultdict(list)
            deg = defaultdict(int)
            for u, v in edges:
                graph[u].append(v)
                graph[v].append(u)
                deg[u] += 1
                deg[v] += 1
            seen = set()
            leafs = [u for u in deg if deg[u] == 1]
            depth = defaultdict(int)
            while leafs != []:
                u = leafs.pop(0)
                if u in seen:
                    continue
                seen.add(u)
                for v in graph[u]:
                    if v in seen:
                        continue
                    diameter = max(diameter, depth[v] + depth[u] + 1)
                    depth[v] = max(depth[v], depth[u]+1)
                    deg[v] -= 1
                    if deg[v] == 1:
                        leafs.append(v)
            return max(depth.values()), diameter
        
        depth1, diameter1 = dfs(edges1)
        depth2, diameter2 = dfs(edges2)
        return max(depth1 + depth2 + 1, diameter1, diameter2)

提交代码评测得到:耗时3216ms,占用内存93.4MB。

相关推荐
kv18305 天前
opencv解迷宫
人工智能·opencv·计算机视觉·广度优先搜索·图算法
Espresso Macchiato17 天前
Leetcode 3624. Number of Integers With Popcount-Depth Equal to K II
leetcode hard·segment tree·分段树·leetcode 3624·leetcode周赛459
EndingCoder1 个月前
图算法在前端的复杂交互
前端·算法·图算法
Espresso Macchiato2 个月前
Leetcode 3563. Lexicographically Smallest String After Adjacent Removals
动态规划·leetcode hard·leetcode周赛451·leetcode 3563
Espresso Macchiato2 个月前
Leetcode 3562. Maximum Profit from Trading Stocks with Discounts
动态规划·背包问题·leetcode hard·leetcode 3562·leetcode周赛451
Espresso Macchiato3 个月前
Leetcode 3530. Maximum Profit from Valid Topological Order in DAG
动态规划·leetcode hard·拓扑序列·leetcode 3530·leetcode双周赛155
Espresso Macchiato4 个月前
Leetcode 3500. Minimum Cost to Divide Array Into Subarrays
leetcode·动态规划·leetcode hard·leetcode 3500·leetcode双周赛153
Espresso Macchiato5 个月前
Leetcode 3490. Count Beautiful Numbers
动态规划·leetcode hard·leetcode 3490·leetcode周赛441·满足条件的自然数
Espresso Macchiato6 个月前
Leetcode 3449. Maximize the Minimum Game Score
贪婪算法·二分法·leetcode hard·leetcode 3449·leetcode周赛436
Espresso Macchiato8 个月前
Leetcode 3389. Minimum Operations to Make Character Frequencies Equal
动态规划·leetcode hard·分类讨论·leetcode 3389·leetcode周赛428