با سلام.
اولين اطلاعات ورودي در ريشه قرار مي گيرد
اطلاعات دوم با ريشه مقايسه شده چنان چهخ کوچک تر از آن باشد در سمت چپ ريشه و گرنه در سمت راست ريشه قرار مي گيرد
اطلاعات بعدي ماننداطلاعات دوم با ريشه مقايسه مي شود چنان چه از آن کوچک تر باشد به سمت چپ و گرنه به سمت راست مي رود
در حرکت به سمت چپ يا راست به هر گره اي که رسيدند با آن گره مثل ريشه عمل مي کنند
عناصر مساوي در درخت قرار نمي گيرند
توجه داشته باشيد که در هر گره اي که هستيد مي توانيد آن را به عنوان ريشه درختي فرض کنيد که
خودش يک زير درخت سمت چپ و يم زير درخت سمت راست دارد
براي آشنايي با شيوه تشکيل درخت دودويي فرض کنيد اعداد زير بايد در درخت قرار گيرند
11 19 4 14 9 2 18
پس از قرار گرفتن اين اعداد در درخت شکل زير درست مي شود
ابتدا عدد يازده وارد شده در ريشه قرار مي گيرد
سپس عدد نوزده وارد مي شود چون بزرگ تر از يازده است در سمت راست آن قرار مي گيرد
سپس عدد چهار وارد مي شود چون از يازده کوچک تر است به سمت چپ مي رود
چون عدد چهارده از يازده بزرگ تر است و در سمت راست مي رود و با نوزده مقايسه مي شود
از آن کوچک تر است و در سمت چپ قرار مي گيرد
عدد نه از يازده کوچک تر است و به سمت چپ مي رور و با چهار مقايسه مي شود
از آن بزرگ تر است و در سمت راست آن قرار مي گيرد
عدد دو از يازده کوچک تر است و به سمت چپ مي رود با چهار مقايسه مي شود
از آن کوچک تر است و در سمت چپ آن قرار مي گيرد
عدد هيجده از يازده بزرگ تر است به سمت راست مي رود و با نوزده مقايسه مي شود از آن کوچک تر است به سمت چپ مي رود
و با چهارده مقايسه مي شود از آن بزرگ تر است و در سمت راست آن قرار مي گيرد
کد:
11
4 19
2 9 14
18
ساختار درخت
Type Tree = ^Rec;
Rec = Record
Name : String;
No : Integer;
Left : Tree;
Right : Tree;
end;
var
P,S : Tree;
درج در درخت دودويي
New(P);
P^.Left = nil;
P^.Right = nil;
if (S = nil) then
S = P;
else if (P^.no > S^.no) then
S^.Right = P;
else
S^.Left = P;
پيمايش درخت يک
ملاقات زير درخت سمت چپ
ملاقات ريشه
ملاقات زير درخت سمت راست
Procedure Inorder(S:Tree)
begin
if S = nil then
Exit;
Inorder(S^.Left);
Inorder(S^.NO);
Inorder(S^.Right);
end;
پيمايش درخت دو
ملاقات ريشه
ملاقات زير درخت سمت چپ
ملاقات زير درخت سمت راست
Procedure Preorder(S:Tree)
begin
if S = nil then
Exit;
Write(S^.NO);
Preorder(S^.Left);
Preorder(S^.Right);
end;
پيمايش درخت سه
ملاقات زير درخت سمت چپ
ملاقات زير درخت سمت راست
ملاقات ريشه
Procedure Postorder(S:Tree)
begin
if S = nil then
Exit;
Postorder(S^.Left);
Postorder(S^.Right);
Write(S^.NO);
end;
--------------------------------------------------------------------------------
Type
Heap = ^Tree;
Tree = Record
Nod : Integer;
Right : Heap;
Left : Heap;
End;
var
First : Heap = Nil;
Procedure Add(X:Integer); // 11 19 4 14 9 2 18
var
Temp : Heap;
K : Heap;
Label L1,L3;
Begin
New(Temp);
if First = Nil then
begin
Temp^.Nod:=X;
Temp^.Right:=Nil;
Temp^.Left:=Nil;
First:=Temp;
end
else
begin
K:=First;
L1: if (K^.Nod < X) then
begin
if K^.Right = Nil then
begin
Temp^.Nod:=X;
Temp^.Right:=Nil;
Temp^.Left:=Nil;
K^.Right:=Temp;
GoTo L3;
end
else if K^.Right <> Nil then
begin
K:=k^.Right;
GoTO L1;
end;
end;
if (K^.Nod > X) then
begin
if K^.Left = Nil then
begin
Temp^.Nod:=X;
Temp^.Right:=Nil;
Temp^.Left:=Nil;
K^.Left:=Temp;
GoTo L3;
end
else if K^.Left <> Nil then
begin
K:=k^.Left;
GoTO L1;
end;
end;
end;
L3:
End;
Procedure Preorder(P:Heap);
Begin
if P = nil then
Exit;
Form1.ListBox2.Items.Add(IntToStr(P^.Nod));
Preorder(P^.Left);
Preorder(P^. Right);
End; // 11 4 2 9 19 14 18