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;
}
//пока не конец левого поддерева
if (currentNode.Left != null)
{
int x = dots[index].X - 30 * currentNode.depth;
int y = dots[index].Y + 40 * currentNode.depth;
string name = currentNode.Element.ToString() + "&" + currentNode.Left.Element.ToString();
dots.Add(new Vector2(currentNode.Left.Element, x, y)); // позиция левого элемента дерева
GetGrafTree(currentNode.Left); // следующий левый элемент
}
//пока не конец правого поддерева
if (currentNode.Right != null)
{
int x = dots[index].X + 30 * currentNode.depth;
int y = dots[index].Y + 40 * currentNode.depth;
string name = currentNode.Element.ToString() + "&" + currentNode.Right.Element.ToString();
dots.Add(new Vector2(currentNode.Right.Element, x, y)); // позиция правого элемента дерева
GetGrafTree(currentNode.Right); // следующий правый элемент
}
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding ProjectName}" Header="№1"/>
<DataGridTextColumn Binding="{Binding TaskName}" Header="№2"/>
<DataGridTextColumn Binding="{Binding Name}" Header="№3"/>
</DataGrid.Columns>