public static int Height(TreeMember knot) { if (knot == null) { return(0); } var leftH = Height(knot.Left); var rightH = Height(knot.Right); return(Math.Max(leftH, rightH) + 1); }
private int minHeight(TreeMember knot) { if (knot == null) { return(0); } var leftH = minHeight(knot.Left); var rightH = minHeight(knot.Right); return(Math.Min(leftH, rightH) + 1); }
private void AddElementRecursively(ref TreeMember current, int value) { if (current == null) { current = new TreeMember { Value = value }; return; } var leftH = minHeight(current.Left); var rigthH = minHeight(current.Right); if (leftH <= rigthH) { AddElementRecursively(ref current.Left, value); } else { AddElementRecursively(ref current.Right, value); } }
private Point DrowWithoutBorders(Graphics g, TreeMember knot, Rectangle rect) { var center = new Point(rect.Left + rect.Width / 2, rect.Top); if (knot == null) { DrawKnot(g, null, center.X, center.Y); return(center); } DrawKnot(g, knot.Value, center.X, center.Y); var subSize = new Size((rect.Width - HorizontalMarging) / 2, rect.Height - VerticalMarging); var leftRect = new Rectangle(new Point(rect.Left, rect.Top + VerticalMarging), subSize); var rightRect = new Rectangle(new Point(rect.Left + (rect.Width + HorizontalMarging) / 2, rect.Top + VerticalMarging), subSize); var leftPoint = DrowWithoutBorders(g, knot.Left, leftRect); var rightPoint = DrowWithoutBorders(g, knot.Right, rightRect); DrawLine(g, center, leftPoint); DrawLine(g, center, rightPoint); return(center); }
public void Draw(Graphics g, TreeMember knot, Rectangle rect) { var newRect = new Rectangle(rect.Left + Radius, rect.Top + Radius, rect.Width - 2 * Radius, rect.Height - 2 * Radius); DrowWithoutBorders(g, knot, newRect); }