File tree Expand file tree Collapse file tree 2 files changed +76
-3
lines changed
Expand file tree Collapse file tree 2 files changed +76
-3
lines changed Original file line number Diff line number Diff line change @@ -509,10 +509,27 @@ public void insert(int[] values, int i)
509509 }
510510 insert ( values , i + 1 ) ;
511511 }
512- }
512+ }
513513 #endregion
514514
515-
515+ #region BinaryTreeDiameterClassTestCase1
516+ [ Fact ]
517+ public void BinaryTreeDiameterClassTestCase1 ( )
518+ {
519+ var root = new BinaryTreeDiameterClass . BinaryTree ( 1 ) ;
520+ root . left = new BinaryTreeDiameterClass . BinaryTree ( 3 ) ;
521+ root . left . left = new BinaryTreeDiameterClass . BinaryTree ( 7 ) ;
522+ root . left . left . left = new BinaryTreeDiameterClass . BinaryTree ( 8 ) ;
523+ root . left . left . left . left = new BinaryTreeDiameterClass . BinaryTree ( 9 ) ;
524+ root . left . right = new BinaryTreeDiameterClass . BinaryTree ( 4 ) ;
525+ root . left . right . right = new BinaryTreeDiameterClass . BinaryTree ( 5 ) ;
526+ root . left . right . right . right = new BinaryTreeDiameterClass . BinaryTree ( 6 ) ;
527+ root . right = new BinaryTreeDiameterClass . BinaryTree ( 2 ) ;
528+ var expected = 6 ;
529+ var actual = new BinaryTreeDiameterClass ( ) . BinaryTreeDiameter ( root ) ;
530+ Assert . True ( expected == actual ) ;
531+ }
532+ #endregion
516533
517534
518535
Original file line number Diff line number Diff line change @@ -995,9 +995,65 @@ public BinaryTree(int value)
995995 this . value = value ;
996996 }
997997 }
998- }
998+ }
999999 #endregion
10001000
1001+ #region BinaryTreeDiameter
1002+ /// <summary>
1003+ ///
1004+ /// </summary>
1005+ public class BinaryTreeDiameterClass
1006+ {
1007+ public int BinaryTreeDiameter ( BinaryTree tree )
1008+ {
1009+
1010+ return GetTreeInfo ( tree ) . diameter ;
1011+ }
1012+
1013+ private TreeInfo GetTreeInfo ( BinaryTree tree )
1014+ {
1015+ if ( tree == null )
1016+ {
1017+ return new TreeInfo ( 0 , 0 ) ;
1018+ }
1019+
1020+ var leftTreeInfo = GetTreeInfo ( tree . left ) ;
1021+ var rightTreeInfo = GetTreeInfo ( tree . right ) ;
1022+
1023+ int longestPathThroughRoot = leftTreeInfo . height
1024+ + rightTreeInfo . height ;
1025+ int maxDiameterSoFar = Math . Max ( leftTreeInfo . diameter , rightTreeInfo . diameter ) ;
1026+
1027+ int currentDiameter = Math . Max ( longestPathThroughRoot , maxDiameterSoFar ) ;
1028+ int currentHeight = 1 + Math . Max ( leftTreeInfo . height , rightTreeInfo . height ) ;
1029+
1030+ return new TreeInfo ( currentDiameter , currentHeight ) ;
1031+ }
1032+
1033+ public class TreeInfo
1034+ {
1035+ public int diameter ;
1036+ public int height ;
1037+ public TreeInfo ( int diameter , int height )
1038+ {
1039+ this . diameter = diameter ;
1040+ this . height = height ;
1041+ }
1042+ }
1043+
1044+ public class BinaryTree
1045+ {
1046+ public int value ;
1047+ public BinaryTree left ;
1048+ public BinaryTree right ;
1049+
1050+ public BinaryTree ( int value )
1051+ {
1052+ this . value = value ;
1053+ }
1054+ }
1055+ }
1056+ #endregion
10011057
10021058
10031059
You can’t perform that action at this time.
0 commit comments