Казалось бы ничего сложного, построил бинарное дерево, добавил два элемента и все!
Но элементы в узле упорядочены по возростанию, я не могу понять как их распределять по узлам, не нарушая баланса, во время вставки и как их там сортировать! Помогите пожалуйста :-(
Пока у меня есть только бинарное дерево
Код
type
ptree=^ttree;
ttree=record
left,right:ptree;
data : integer;
end;
TForm1 = class(TForm)
Button1: TButton;
TreeView1: TTreeView;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
root:ptree;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
procedure push_to_tree(i:integer);
var n,temp : ptree;
placed : boolean;
begin
temp:=root; placed := false;
while not placed do
if temp^.data>i then begin
if temp^.right<>nil then temp := temp^.right else
begin
new(n);
n^.left := nil;
n^.right := nil;
n^.data := i;
temp^.right := n;
placed := true;
end
end
else
if temp^.data<i then
if temp^.left<>nil then temp := temp^.left else
begin
new(n);
n^.left := nil;
n^.right := nil;
n^.data := i;
temp^.left := n;
placed := true;
end
else
placed := true;
end;
procedure print_tree_to_tree_view(root:ptree;parent:TTreeNode);
var next_parent : TTreeNode;
begin
next_parent:=TreeView1.Items.AddChild(parent,inttostr(root^.data));
if root^.left <> nil then print_tree_to_tree_view(root^.left, next_parent);
if root^.right<> nil then print_tree_to_tree_view(root^.right,next_parent);
end;
var i : integer;
begin
{creating tree from root}
new(root);
root^.data := 10;
root^.left := nil; root^.right := nil;
for i := 0 to Memo1.Lines.Count-1 do
push_to_tree(strtoint(Memo1.Lines.Strings[i]));
TreeView1.Items.Clear;
print_tree_to_tree_view(root,nil);
end;
end.
Сообщение отредактировано: Гоблин -