< Summary

Information
Class: LeetCode.Algorithms.FindMinimumDiameterAfterMergingTwoTrees.FindMinimumDiameterAfterMergingTwoTreesDepthFirstSearch
Assembly: LeetCode
File(s): D:\a\LeetCode-CS\LeetCode-CS\source\LeetCode\Algorithms\FindMinimumDiameterAfterMergingTwoTrees\FindMinimumDiameterAfterMergingTwoTreesDepthFirstSearch.cs
Line coverage
100%
Covered lines: 43
Uncovered lines: 0
Coverable lines: 43
Total lines: 84
Line coverage: 100%
Branch coverage
100%
Covered branches: 12
Total branches: 12
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
MinimumDiameterAfterMerge(...)100%11100%
BuildAdjList(...)100%44100%
FindDiameter(...)100%88100%

File(s)

D:\a\LeetCode-CS\LeetCode-CS\source\LeetCode\Algorithms\FindMinimumDiameterAfterMergingTwoTrees\FindMinimumDiameterAfterMergingTwoTreesDepthFirstSearch.cs

#LineLine coverage
 1// --------------------------------------------------------------------------------
 2// Copyright (C) 2025 Eugene Eremeev (also known as Yevhenii Yeriemeieiv).
 3// All Rights Reserved.
 4// --------------------------------------------------------------------------------
 5// This software is the confidential and proprietary information of Eugene Eremeev
 6// (also known as Yevhenii Yeriemeieiv) ("Confidential Information"). You shall not
 7// disclose such Confidential Information and shall use it only in accordance with
 8// the terms of the license agreement you entered into with Eugene Eremeev (also
 9// known as Yevhenii Yeriemeieiv).
 10// --------------------------------------------------------------------------------
 11
 12namespace LeetCode.Algorithms.FindMinimumDiameterAfterMergingTwoTrees;
 13
 14/// <inheritdoc />
 15public class FindMinimumDiameterAfterMergingTwoTreesDepthFirstSearch : IFindMinimumDiameterAfterMergingTwoTrees
 16{
 17    /// <summary>
 18    ///     Time complexity - O(n + m)
 19    ///     Space complexity - O(n + m)
 20    /// </summary>
 21    /// <param name="edges1"></param>
 22    /// <param name="edges2"></param>
 23    /// <returns></returns>
 24    public int MinimumDiameterAfterMerge(int[][] edges1, int[][] edges2)
 225    {
 226        var adjList1 = BuildAdjList(edges1.Length + 1, edges1);
 227        var adjList2 = BuildAdjList(edges2.Length + 1, edges2);
 28
 229        var diameter1 = FindDiameter(adjList1, 0, -1).Item1;
 230        var diameter2 = FindDiameter(adjList2, 0, -1).Item1;
 31
 232        var combinedDiameter = (int)Math.Ceiling(diameter1 / 2.0) + (int)Math.Ceiling(diameter2 / 2.0) + 1;
 33
 234        return Math.Max(Math.Max(diameter1, diameter2), combinedDiameter);
 235    }
 36
 37    private static List<List<int>> BuildAdjList(int size, int[][] edges)
 438    {
 439        var adjList = new List<List<int>>(size);
 40
 5241        for (var i = 0; i < size; i++)
 2242        {
 2243            adjList.Add([]);
 2244        }
 45
 4846        foreach (var edge in edges)
 1847        {
 1848            adjList[edge[0]].Add(edge[1]);
 1849            adjList[edge[1]].Add(edge[0]);
 1850        }
 51
 452        return adjList;
 453    }
 54
 55    private static (int Diameter, int Depth) FindDiameter(List<List<int>> adjList, int node, int parent)
 2256    {
 2257        var maxDepth1 = 0;
 2258        var maxDepth2 = 0;
 2259        var diameter = 0;
 60
 13861        foreach (var neighbor in adjList[node].Where(neighbor => neighbor != parent))
 1862        {
 1863            var (childDiameter, childDepth) = FindDiameter(adjList, neighbor, node);
 64
 1865            var depth = childDepth + 1;
 66
 1867            diameter = Math.Max(diameter, childDiameter);
 68
 1869            if (depth > maxDepth1)
 1070            {
 1071                maxDepth2 = maxDepth1;
 1072                maxDepth1 = depth;
 1073            }
 874            else if (depth > maxDepth2)
 575            {
 576                maxDepth2 = depth;
 577            }
 1878        }
 79
 2280        diameter = Math.Max(diameter, maxDepth1 + maxDepth2);
 81
 2282        return (diameter, maxDepth1);
 2283    }
 84}