Example #1
0
        private void GetTree(int i, ref BinarySearchTree.Node nodeNow, int height, Graphics g, int deltaY, int x, int deltaX)
        {
            Font       drawFont  = new Font("Arial", 12);
            SolidBrush drawBrush = new SolidBrush(Color.Black);

            if (nodeNow != null)
            {
                int y = (i) * deltaY + 30;
                g.DrawEllipse(Pens.Black, x, y, 30, 30);
                g.DrawString(nodeNow.value.ToString(), drawFont, drawBrush, x + 3, y + 3);

                i++;
                int tmp = x;
                deltaX = (int)(deltaX / 2.0);
                if (nodeNow.left != null)
                {
                    x = x - deltaX;
                    GetTree(i, ref nodeNow.left, height, g, deltaY, x, deltaX);
                    g.DrawLine(Pens.Black, tmp + 15, y + 30, x + 15, y + deltaY);
                }

                if (nodeNow.right != null)
                {
                    x = tmp + deltaX;
                    GetTree(i, ref nodeNow.right, height, g, deltaY, x, deltaX);
                    g.DrawLine(Pens.Black, tmp + 15, y + 30, x + 15, y + deltaY);
                }
            }
        }
Example #2
0
        private void Draw(BinarySearchTree binaryTree)
        {
            int[] array = new int[] { 55, 5, 88, 50, 25, 11, 26, 17, 70, 99, 18, 78, 23, 3, 4 };
            binaryTree.Init(array);
            int length = binaryTree.Height();
            int depth  = (int)(Math.Pow(2, length - 1));
            int deltaY = (int)(this.Size.Height / (length + 1));
            int x      = (int)(this.Size.Width / 2.0);

            bool[,] isUsed = new bool[length, depth];
            int[,] tree    = new int[length, depth];
            binaryTree.ReturnTree(ref tree, ref isUsed);
            Graphics g = CreateGraphics();

            g.Clear(this.BackColor);
            int i = 0;

            BinarySearchTree.Node nowNode = binaryTree.treeRoot;
            GetTree(i, ref nowNode, length, g, deltaY, x, x);
        }