Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }