public PyramidBinaryTreeParameters ReadAndMapPyramidBinaryTree(string unparsedTree) { var pyramidBinaryTreeRows = new List <List <int> >(); using (var reader = new StringReader(unparsedTree)) { for (var line = reader.ReadLine(); line != null; line = reader.ReadLine()) { var pyramidTreeRowValues = line.Split((char[])null, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList(); pyramidBinaryTreeRows.Add(pyramidTreeRowValues); } } var initialRowIndex = 0; var initialColumnIndex = 0; var pyramidBinaryTreeParameters = new PyramidBinaryTreeParameters() { Depth = pyramidBinaryTreeRows.Count, InitialNode = CreateBinaryTreeNode(pyramidBinaryTreeRows, initialRowIndex, initialColumnIndex) }; return(pyramidBinaryTreeParameters); }
public PyramidBinaryTreeSumResults CalculatePyramidBinaryTreeMaximumSumResults(PyramidBinaryTreeParameters pyramidBinaryTreeParameters) { var isInitialNodeEven = pyramidBinaryTreeParameters.InitialNode.Value % 2 == 0; var allProperPyramidBinaryTreeResults = new List <PyramidBinaryTreeSumResults>(); var initialPathSum = 0; var initialNodeSumResults = new PyramidBinaryTreeSumResults() { Path = new List <int>(), PathSum = initialPathSum }; CalculateSumAndPathFromTreeNode(allProperPyramidBinaryTreeResults, pyramidBinaryTreeParameters.InitialNode, initialNodeSumResults, !isInitialNodeEven, pyramidBinaryTreeParameters.Depth); var maximumSumResult = allProperPyramidBinaryTreeResults.Any() ? allProperPyramidBinaryTreeResults.Aggregate((firstItem, nextItem) => nextItem.PathSum > firstItem.PathSum ? nextItem : firstItem) : null; return(maximumSumResult); }