07-01-2019, Saat: 23:25
İkili Arama Ağacı nedir? bakınız.
Delphi Sample
Meraklıları için kod ;
Delphi Sample
Meraklıları için kod ;
type Node = ^TNode; TNode = record eleman : Integer; Sol,Sag : Node; end; { 50 / \ 30 70 / \ / \ 20 40 60 80 } var Form1: TForm1; implementation {$R *.dfm} function NewNode(AEleman:Integer):Node; begin New(Result); Result^.eleman := AEleman; Result^.Sol := nil; Result^.Sag := nil; end; function InsertNode(ANode:Node;AEleman:Integer):Node; begin if ANode = nil then Result := NewNode(AEleman) else begin if AEleman <= ANode^.eleman then ANode^.Sol := InsertNode(ANode^.Sol,AEleman) else ANode^.Sag := InsertNode(ANode^.Sag,AEleman); Result := ANode; end; end; function En_Kucuk(ARoot:Node):Node; begin if ARoot^.Sol = nil then Result := ARoot else result := En_Kucuk(ARoot^.Sol); end; function En_Buyuk(ARoot:Node):Node; begin if ARoot^.Sag = nil then Result := ARoot else result := En_Buyuk(ARoot^.Sag); end; procedure InOrderList(ARoot:Node;AMem:TMemo); // Sol,Kök,Sağ begin if ARoot <> nil then begin InOrderList(ARoot^.Sol,AMem); AMem.Lines.Add(ARoot.eleman.ToString); InOrderList(ARoot^.Sag,AMem); end; end; procedure PreOrderList(ARoot:Node;AMem:TMemo); // Kök,Sol,Sağ begin if ARoot <> nil then begin AMem.Lines.Add(ARoot.eleman.ToString); PreOrderList(ARoot^.Sol,AMem); PreOrderList(ARoot^.Sag,AMem); end; end; procedure PostOrderList(ARoot:Node;AMem:TMemo); // Sol,Sağ,Kök begin if ARoot <> nil then begin PostOrderList(ARoot^.Sol,AMem); PostOrderList(ARoot^.Sag,AMem); AMem.Lines.Add(ARoot.eleman.ToString); end; end; function Search(ARoot:Node;Aranan:Integer):Node; begin if ARoot = nil then Result := nil else begin if Aranan < ARoot^.eleman then Result := Search(ARoot^.Sol,Aranan) else if Aranan > ARoot^.eleman then Result := Search(ARoot^.Sag,Aranan) else Result := ARoot; end; end; procedure TForm1.BtnListeleClick(Sender: TObject); begin Var Root : Node; Root := nil; Root := InsertNode(Root,50); InsertNode(Root, 30); InsertNode(Root, 20); InsertNode(Root, 40); InsertNode(Root, 70); InsertNode(Root, 60); InsertNode(Root, 80); MemNodeInOrder.Lines.Add('In Order'); InOrderList(Root,MemNodeInOrder); MemNodePreOrder.Lines.Add('Pre Order'); PreOrderList(Root,MemNodePreOrder); MemNodePostOrder.Lines.Add('Post Order'); PostOrderList(Root,MemNodePostOrder); edtEnKucuk.Text := 'En Küçük ' + IntToStr(En_Kucuk(Root).eleman); edtEnBuyuk.Text := 'En Büyük ' + IntToStr(En_Buyuk(Root).eleman); Var Temp : Node; Temp := Search(Root,20); if Temp <> nil then edtSearch.Text := 'Bulunan ' + Temp^.eleman.ToString else edtSearch.Text := 'Bulunamadı!'; end; end.
Yalnızım ama bir kente yürüyen ordu gibiyim, edebiyattan kaçınmalıyım..