Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private static List<Vector2> GetGrafTree(Node<double> currentNode)
- {
- if (currentNode.depth == 1)
- dots.Add(new Vector2(currentNode.Element, (Program.getForm.Width / 2), 10, 1)); // добавить корень дерева
- int index = dots.FindLastIndex(elem => (elem.Value == currentNode.Element)); // находим вышестоящий элемент
- //пока не конец левого поддерева
- if (currentNode.Left != null)
- {
- int x = dots[index].X - (30 * currentNode.depth);
- int y = dots[index].Y + 40;
- string name = currentNode.Element.ToString() + "&" + currentNode.Left.Element.ToString();
- //lines.Add(new Line(name, dots[index].X+5, dots[index].Y+25, x+15, y));
- dots.Add(new Vector2(currentNode.Left.Element, x, y, currentNode.Left.depth)); // позиция левого элемента дерева
- GetGrafTree(currentNode.Left); // следующий левый элемент
- }
- //пока не конец правого поддерева
- if (currentNode.Right != null)
- {
- int x = dots[index].X + (30 * currentNode.depth);
- int y = dots[index].Y + 40;
- string name = currentNode.Element.ToString() + "&" + currentNode.Right.Element.ToString();
- //lines.Add(new Line(name, dots[index].X+25, dots[index].Y+25, x+15, y));
- dots.Add(new Vector2(currentNode.Right.Element, x, y, currentNode.Right.depth)); // позиция правого элемента дерева
- GetGrafTree(currentNode.Right); // следующий правый элемент
- }
- return dots;
- }
- class TreeNode
- {
- public TreeNode(int value)
- {
- Value = value;
- }
- public int Value { get; set; }
- public TreeNode Left { get; set; }
- public TreeNode Right { get; set; }
- }
- static void Print(TreeNode node, int y, int left, int right)
- {
- if (node == null)
- {
- return;
- }
- var x = left + (right - left) / 2;
- Console.SetCursorPosition(x, y);
- Console.Write(node.Value);
- Print(node?.Left, y + 1, left, x);
- Print(node?.Right, y + 1, x, right);
- }
- var root = CreateTree();
- Print(root, 0, 0, Console.WindowWidth);
- int Высота(Вершина вершина)
- {
- if (вершина == null) return -1;
- return 1 + Max(Высота(вершина.ЛевыйПотомок), Высота(вершина.ПравыйПотомок));
- }
- <Viewbox Stretch="Uniform">
- <Canvas Name="TreeCanvas"/>
- </Viewbox>
- void DrawTree(Node node, double x, double y, double dx, double dy)
- {
- if (node == null) return;
- var e = new Ellipse
- {
- Width = 5,
- Height = 5,
- Fill = new SolidColorBrush(Colors.Black)
- };
- TreeCanvas.Children.Add(e);
- Canvas.SetLeft(e, x);
- Canvas.SetTop(e, y);
- DrawTree(node.Left, x - dx, y + dy, dx / 2, dy);
- DrawTree(node.Right, x + dx, y + dy, dx / 2, dy);
- }
- DrawTree(tree, 100, 0, 50, 50);
- TreeCanvas.Height = 2 * 100 + 2 * 5;
- TreeCanvas.Width = 2 * 100 + 2 * 5;
Add Comment
Please, Sign In to add comment