< Summary

Information
Class: LeetCode.Algorithms.CousinsInBinaryTree2.CousinsInBinaryTree2BreadthFirstSearch
Assembly: LeetCode
File(s): D:\a\LeetCode-CS\LeetCode-CS\source\LeetCode\Algorithms\CousinsInBinaryTree2\CousinsInBinaryTree2BreadthFirstSearch.cs
Line coverage
100%
Covered lines: 48
Uncovered lines: 0
Coverable lines: 48
Total lines: 94
Line coverage: 100%
Branch coverage
100%
Covered branches: 20
Total branches: 20
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
ReplaceValueInTree(...)100%2020100%

File(s)

D:\a\LeetCode-CS\LeetCode-CS\source\LeetCode\Algorithms\CousinsInBinaryTree2\CousinsInBinaryTree2BreadthFirstSearch.cs

#LineLine coverage
 1// --------------------------------------------------------------------------------
 2// Copyright (C) 2026 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
 12using LeetCode.Core.Models;
 13
 14namespace LeetCode.Algorithms.CousinsInBinaryTree2;
 15
 16/// <inheritdoc />
 17public sealed class CousinsInBinaryTree2BreadthFirstSearch : ICousinsInBinaryTree2
 18{
 19    /// <summary>
 20    ///     Time complexity - O(n), where n is the number of nodes in the binary tree
 21    ///     Space complexity - O(h), where h is the height of the tree
 22    /// </summary>
 23    /// <param name="root"></param>
 24    /// <returns></returns>
 25    public TreeNode ReplaceValueInTree(TreeNode root)
 226    {
 227        var queue = new Queue<TreeNode>();
 28
 229        queue.Enqueue(root);
 30
 231        var levelSums = new List<int>();
 32
 733        while (queue.Count > 0)
 534        {
 535            var levelSum = 0;
 536            var levelSize = queue.Count;
 37
 2838            for (var i = 0; i < levelSize; i++)
 939            {
 940                var currentNode = queue.Dequeue();
 41
 942                levelSum += currentNode.val;
 43
 944                if (currentNode.left != null)
 345                {
 346                    queue.Enqueue(currentNode.left);
 347                }
 48
 949                if (currentNode.right != null)
 450                {
 451                    queue.Enqueue(currentNode.right);
 452                }
 953            }
 54
 555            levelSums.Add(levelSum);
 556        }
 57
 258        queue.Enqueue(root);
 59
 260        var levelIndex = 1;
 61
 262        root.val = 0;
 63
 764        while (queue.Count > 0)
 565        {
 566            var levelSize = queue.Count;
 67
 2868            for (var i = 0; i < levelSize; i++)
 969            {
 970                var currentNode = queue.Dequeue();
 71
 972                var sum = (currentNode.left?.val ?? 0) + (currentNode.right?.val ?? 0);
 73
 974                if (currentNode.left != null)
 375                {
 376                    currentNode.left.val = levelSums[levelIndex] - sum;
 77
 378                    queue.Enqueue(currentNode.left);
 379                }
 80
 981                if (currentNode.right != null)
 482                {
 483                    currentNode.right.val = levelSums[levelIndex] - sum;
 84
 485                    queue.Enqueue(currentNode.right);
 486                }
 987            }
 88
 589            levelIndex++;
 590        }
 91
 292        return root;
 293    }
 94}