public static void Main()
Console.WriteLine("A tree IsBalanced: {0}", CheckIfBalanced(nodeA).IsBalanced);
Console.WriteLine("B tree IsBalanced: {0}", CheckIfBalanced(nodeB).IsBalanced);
public static SubTreeInfo CheckIfBalanced(Node node)
SubTreeInfo leftSubTreeInfo = null;
SubTreeInfo rightSubTreeInfo = null;
leftSubTreeInfo = CheckIfBalanced(node.Left);
height += leftSubTreeInfo.Height;
if (!leftSubTreeInfo.IsBalanced)
rightSubTreeInfo = CheckIfBalanced(node.Right);
height += rightSubTreeInfo.Height;
if (!rightSubTreeInfo.IsBalanced)
var isBalanced = SubTreeInfo.GetDiffBetweenSubTrees(leftSubTreeInfo, rightSubTreeInfo) <= 1;
return new SubTreeInfo(height, isBalanced);
public SubTreeInfo(int height, bool isBalanced)
public static int GetDiffBetweenSubTrees(SubTreeInfo left, SubTreeInfo right)
leftHeight = left.Height;
rightHeight = right.Height;
return Math.Abs(leftHeight - rightHeight);