Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
            }
        }
Example #4
0
        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);
        }
Example #5
0
        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);
        }