Top.Mail.Ru
Ответы

Существование класса "Tree" в Pascal ABC NET

Существует ли класс Tree в Pascal ABC NET?
Если да, так его подключить и где узнать про методы?

По дате
По рейтингу
Аватар пользователя
Новичок
5лет

И да и нет.

Почему нет:
Деревья бывают разные с разным поведением. Их все описывать и создавать отдельные классы дело не очень благодарное и в принципе реализовать нужное дерево самому обычно не проблема (есс-но бывают тяжелые случаи).

Почему да:
Есть стандартный элемент управления TreeView
( https://www.codeproject.com/KB/cs/TreeViewFromHierarchyID/Tree_small.jpg )
и с ним как-то надо работать, поэтому есть TreeNode и TreeNodeCollection, узлы которого строки, с возможным изображением и т. д. Пример работы с ними в консольном приложении:

{$reference '%GAC%\System.Windows.Forms.dll'}

uses System.Windows.Forms;

procedure PrintTree(t: TreeNodeCollection);
begin
foreach var item:TreeNode in t do
begin
WriteLn(item.Level,' : ', item.Text);
PrintTree(item.Nodes);
end;
end;

begin
{+} var t := new TreeNode('Root');
{\} t.Nodes.Add('Child 1-1');
{ |-} t.Nodes[0].Nodes.Add('Sub Child 1-1-1');
{ \-} t.Nodes[0].Nodes.Add('Sub Child-1-1-2');
{\} t.Nodes.Add('Child 1-2');
{ |-} t.Nodes[1].Nodes.Add('Sub Child-1-2-1');
{ |-} t.Nodes[1].Nodes.Add('Sub Child-1-2-1');
{ |-} t.Nodes[1].Nodes.Add('Sub Child-1-2-2');
{ \-} t.Nodes[1].Nodes.Add('Sub Child-1-2-3');
PrintTree(t.Nodes);
end.

Описание для C# справедливо для Pascal ABC.Net (есс-но разница в синтаксисе)
https://docs.microsoft.com/ru-ru/dotnet/api/system.windows.forms.treenode?view=netcore-3.0

Если нужен пример конкретного типа дерева (н-р двоичного со своим типом данных) - могу попробовать набросать шаблон.