Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public void VisualiseTree(Graphics g)
- {
- if (Root == null)
- {
- g.DrawString("Дерево пустое (root = null)", new Font("Helvetica", 15), Brushes.Black, (float)0.0, (float)0.0);
- return;
- }
- // План А
- int xEllipce = 235, yEllipce = 0, xLine = 240, yLine = 5, x1Line = 240, y1Line = 5;
- g.Clear(Form1.DefaultBackColor);
- g.FillEllipse(Brushes.White, xEllipce, yEllipce, 10, 10);
- g.DrawString("" + Root.Data, new Font("Helvetica", 8), Brushes.Black, xEllipce, yEllipce);
- if (Root.Left != null) Draw_Left(g, Root.Left, xEllipce, yEllipce, xLine, yLine, x1Line, y1Line);
- if (Root.Right != null) Draw_Right(g, Root.Right, xEllipce, yEllipce, xLine, yLine, x1Line, y1Line);
- // План Б
- //VisualiseTree(g, Root);
- }
- private void VisualiseTree(Graphics g, Node<T> node, int count = 0, double xValue = 235, double yValue = 0, double x1Line = 240, double y1Line = 5, double xLine = 240, double yLine = 5)
- {
- if (node != null)
- {
- MessageBox.Show("x: " + xLine + " y: " + yLine + " x1: " + x1Line + " y1: " + y1Line);
- g.FillEllipse(Brushes.White, (int)xValue, (int)yValue, 10, 10); // круг
- g.DrawString("" + node.Data, new Font("Helvetica", 8), Brushes.Black, (float)xValue, (float)yValue); // числа в кругах
- g.DrawLine(pen, (float)xLine, (float)yLine, (float)x1Line, (float)y1Line); // линии
- VisualiseTree(g, node.Left, count++, xValue -= 35, yValue += 10, xLine, yLine, xLine -= 35, yLine += 11); // рек
- VisualiseTree(g, node.Right, count++, xValue += 65, yValue += 10, xLine + 35, yLine - 11, xLine += 65, yLine += 9);
- }
- }
- private void Draw_Left(Graphics g, Node<T> node, int parent_xEllipce, int parent_yEllipce, int parent_xLine, int parent_yLine, int parent_x1Line, int parent_y1Line)
- {
- int count, xEllipce, yEllipce, xLine, yLine, x1Line, y1Line, xEllipce_distance = 20, xLine_distance = 20, y_distance = 10;
- if (node.Right != null)
- {
- count = 1 + Children_Count_Right(node.Right, 0);
- } else count = 0;
- xEllipce = parent_xEllipce - xEllipce_distance - (count * xEllipce_distance);
- yEllipce = parent_yEllipce + y_distance;
- x1Line = parent_xLine;
- y1Line = parent_yLine;
- xLine = parent_xLine - xLine_distance - (count * xLine_distance);
- yLine = parent_yLine + y_distance;
- g.FillEllipse(Brushes.White, xEllipce, yEllipce, 10, 10);
- g.DrawString("" + node.Data, new Font("Helvetica", 8), Brushes.Black, xEllipce, yEllipce);
- g.DrawLine(pen, (float)xLine, (float)yLine, (float)x1Line, (float)y1Line);
- if (node.Left != null) Draw_Left(g, node.Left, xEllipce, yEllipce, xLine, yLine, x1Line, y1Line);
- if (node.Right != null) Draw_Right(g, node.Right, xEllipce, yEllipce, xLine, yLine, x1Line, y1Line); ;
- }
- private void Draw_Right(Graphics g, Node<T> node, int parent_xEllipce, int parent_yEllipce, int parent_xLine, int parent_yLine, int parent_x1Line, int parent_y1Line)
- {
- int count, xEllipce, yEllipce, xLine, yLine, x1Line, y1Line, xEllipce_distance = 20, xLine_distance = 20, y_distance = 10;
- if (node.Left != null)
- {
- count = 1 + Children_Count_Left(node.Left, 0);
- }
- else count = 0;
- xEllipce = parent_xEllipce + xEllipce_distance + (count * xEllipce_distance);
- yEllipce = parent_yEllipce + y_distance;
- x1Line = parent_xLine;
- y1Line = parent_yLine;
- xLine = parent_xLine + xLine_distance + (count * xLine_distance);
- yLine = parent_yLine + y_distance;
- g.FillEllipse(Brushes.White, xEllipce, yEllipce, 10, 10);
- g.DrawString("" + node.Data, new Font("Helvetica", 8), Brushes.Black, xEllipce, yEllipce);
- g.DrawLine(pen, (float)xLine, (float)yLine, (float)x1Line, (float)y1Line);
- if (node.Left != null) Draw_Left(g, node.Left, xEllipce, yEllipce, xLine, yLine, x1Line, y1Line);
- if (node.Right != null) Draw_Right(g, node.Right, xEllipce, yEllipce, xLine, yLine, x1Line, y1Line);
- }
- private int Children_Count_Right(Node<T> node, int count)
- {
- if (node.Right != null)
- {
- if (count == 1) return 1;
- return 1 + Children_Count_Right(node.Right, count - 1);
- } return 1;
- }
- private int Children_Count_Left(Node<T> node, int count)
- {
- if (node.Left != null)
- {
- if (count == 1) return 1;
- return 1 + Children_Count_Left(node.Left, count - 1);
- } return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement