Ejemplo n.º 1
0
            public int Diameter()
            {
                HeightPath height = new HeightPath();

                var diameterRecursive = DiameterRecursive(root, height);

                return(diameterRecursive > 0 ? diameterRecursive - 1 : diameterRecursive);
            }
Ejemplo n.º 2
0
            private int DiameterRecursive(TreeNode node, HeightPath height)
            {
                if (node == null)
                {
                    height.Height = 0;
                    return(0);
                }

                var leftPathHeight  = new HeightPath();
                var rightPathHeight = new HeightPath();

                int leftDiameter  = DiameterRecursive(node.left, leftPathHeight);
                int rightDiameter = DiameterRecursive(node.right, rightPathHeight);

                height.Height = Math.Max(leftPathHeight.Height, rightPathHeight.Height) + 1;

                return(Math.Max(leftPathHeight.Height + rightPathHeight.Height + 1,
                                Math.Max(leftDiameter, rightDiameter)));
            }