Skip to content

Commit 8add171

Browse files
More algorithms and unit tests
1 parent 3890014 commit 8add171

File tree

2 files changed

+76
-3
lines changed

2 files changed

+76
-3
lines changed

Algorithms/Medium_Algorithms.Tests/UnitTest1.cs

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff 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

Algorithms/Medium_Algorithms/MediumAlgorithmsClass.cs

Lines changed: 57 additions & 1 deletion
Original file line numberDiff line numberDiff 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

0 commit comments

Comments
 (0)