public void Given_Tree_When_FindLargestValues_Then_ShouldReturnLargestValues() { //Given var problem = new Leetcode_515_FindLargestValueInEachTreeRow_V1(); var expectedResult = new int[] { 1, 3, 7 }; var tree = new TreeNode515(1); var node11 = new TreeNode515(2); var node12 = new TreeNode515(3); tree.Left = node11; tree.Right = node12; var node21 = new TreeNode515(4); var node22 = new TreeNode515(5); node11.Left = node21; node11.Right = node22; var node23 = new TreeNode515(6); var node24 = new TreeNode515(7); node12.Left = node23; node12.Right = node24; //When var actualResult = problem.FindLargestValues(tree); //Then Assert.AreEqual(expectedResult.Length, actualResult.Count); for (var i = 0; i < expectedResult.Length; i++) { Assert.AreEqual(expectedResult[i], actualResult[i]); } }
public IList <int> FindLargestValues(TreeNode515 root) { var largestValues = new List <int>(); var buffer = new Queue <(int level, TreeNode515 node)>(); var currentLevel = 0; buffer.Enqueue((0, root)); largestValues.Add(root.Value); while (buffer.Count > 0) { var currentItem = buffer.Dequeue(); var currentNode = currentItem.node; if (currentItem.level > currentLevel) { currentLevel = currentItem.level; largestValues.Add(currentNode.Value); } else { if (currentNode.Value > largestValues[currentLevel]) { largestValues[currentLevel] = currentNode.Value; } } if (currentNode.Left != null) { buffer.Enqueue((currentItem.level + 1, currentNode.Left)); } if (currentNode.Right != null) { buffer.Enqueue((currentItem.level + 1, currentNode.Right)); } } return(largestValues); }