Tree
A. Tujuan
Setelah praktikum ini, praktikan diharapkan dapat:
1. Memahami konsep algoritmaTree
2. Memahami operasi pada Tree
3. Menerapkan Tree menggunakan bahasa pemograman
B. Pendahuluan
1. PENGERTIAN TREE
Kumpulan node yang saling terhubung satu sama lain dalam suatu kesatuan yang
membentuk layakya struktur sebuah pohon. Struktur pohon adalah suatu cara
merepresentasikan suatu struktur hirarki (one-to-many) secara grafis yang mirip
sebuah pohon, walaupun pohon tersebut hanya tampak sebagai kumpulan node-
node dari atas ke bawah. Suatu struktur data yang tidak linier yang menggambarkan
hubungan yang hirarkis (one-to-many) dan tidak linier antara elemen-elemennya.
Tree dapat juga didefinisi kan sebagai kumpulan simpul/node dengan satu elemen
khusus yang disebut root dan node lainnya yang terbagi lagi menjadi himpunan-
himpunan yang disebut subtree
3
Pada gambar 2, terdapat n = 4 leaf. Sehingga terdapat sebanyak (2 * 4) - 1 = 7
node.Level dari suatu node dalam binary tree didefinisikan dengan mengikuti
suatu aturan bahwa : root dari sebuah tree berada pada level 0, kemudian level
dibawahnya adalah level 1, dan seterusnya. contoh, pada binary tree terdapat
digambar 2, A adalah root dan berada pada level 0, B dan C berada pada level 1,
D dan E berada pada level 2, F dan G berada pada level 2. Depth (kedalaman)
dari binary tree adalah level maksimum dari beberapa leaf di dalam tree.
• complete binary tree
Jika suatu binary tree pada setiap nodenya (kecuali leaf) memiliki dua son, dan
setiap subtree memiliki panjang path yang sama, maka yang demikian dikatakan
sebagai complete binary tree (perhatikan gambar 3).Jika pada complete binary
tree terdapat n node pada level l, kemudian depth binary tree adalah d, secara
matematis dapat dirumuskan sebagai berikut :
dimana, tn mewakili total jumlah node, d mewakili depth suatu binary tree
4
searching/pencarian node tertentu dalam binary tree.
a. Operasi-operasi pada Binary Search Tree
• Melakukan setup sebuah tree yang kosong.
• Melakukan pengujian apakah sebuah tree kosong.
• Menambahkan node baru.
• Traversal, yaitu mengunjungi seluruh node pada tree, masing-masing sekali.
Ada tiga cara traverse, yaitu : PreOrder, InOrder dan PostOrder
• Melakukan pencarian node dengan kunci pencarian node yang spesifik.
• Menghapus node yang telah dibuat.
• Melakukan akses pada node yang ditunjuk secara spesifik.
• Melakukan setup sebuah tree yang kosong, melakukan pengujian apakah
sebuah tree kosong, dan menambahkan/menyisipkan node baru.
• Deklarasi Binary Tree
type NodePtr = ^NodeRec;
NodeRec = record
value : integer;
left,
right : NodePtr;
end;
var root : NodePtr;
• Insert Tree
procedure InsertTree(X:integer; Var StartNode : NodePtr);
var NewEntry : NodePtr;
begin
if (StartNode=nil) then
begin
new(NewEntry);
NewEntry^.value := X;
NewEntry^.left := nil;
NewEntry^.right := nil;
StartNode := NewEntry;
end
else
if (X < StartNode^.value) then
InsertTree(X, StartNode^.left)
else
InsertTree(X, StartNode^.right);
end;
5
• Mencetak Tree
procedure PrintTree(StartNode : NodePtr);
begin
if (StartNode<>nil) then
begin
PrintTree(StartNode^.left);
writeln(StartNode^.value);
PrintTree(StartNode^.right);
end
end;
• MenghapuS Tree
procedure DeleteEntry(var Entry, Father : NodePtr);
var NewChild : NodePtr;
begin
if (Entry^.left=nil) then
begin
NewChild := Entry^.right;
AlterParent(Father, Entry, NewChild)
end
else
begin
NewChild := Entry^.left;
AlterParent(Father, Entry, NewChild)
end
else
PromoteSuccessor(Entry)
end;
(a)
procedure AlterParent(var Father : NodePtr;
Entry, NewChild : NodePtr);
begin
if (Father=nil) then
Root := NewChild
else
if (Father^.left=Entry) then
Father^.left := NewChild
else
Father^.right := NewChild
end;
procedure PromoteSuccessor (var Entry : NodePtr);
var Successor, SuccParent : NodePtr;
begin
Successor := Entry^.right;
SuccParent := Entry;
while (Successor^.left <> nil) do
6
begin
SuccParent := Successor;
Successor := Successor^.left;
end;
if (SuccParent=Entry) then
Entry^.right := Successor^.right
else
Successor^.left := Successor^.right;
Entry^.value := Successor^.value;
end;
• Traversal,
Traversal yaitu mengunjungi seluruh node pada tree, secara PreOrder, InOrder
dan Post Order.
• PreOrder : cetak isi node yang dikunjungi, kunjungi left son, kunjungi right son.
• InOrder : kunjungi left son, cetak isi node yang dikunjungi, kunjungi right son.
• PostOrder : kunjungi left son, kunjungi right son, cetak isi node yang dikunjungi
• PreOrder
procedure PreOrder(Tree : NodePtr);
begin
if Tree<>nil then
begin
write(Tree^.value);
PreOrder(Tree^.left);
PreOrder(Tree^.right);
end;
end;
• InOrder
procedure InOrder(Tree : NodePtr);
begin
if Tree<>nil then
begin
InOrder(Tree^.left);
write(Tree^.value);
InOrder(Tree^.right);
end;
end;
• PostOrder
procedure PostOrder(Tree : NodePtr;
begin
if Tree<>nil then
begin
PostOrder(Tree^.left);
7
PostOrder(Tree^.right);
write(Tree^.value);
end;
end;
REFERENSI/DAFTAR PUSTAKA
1. Teori dan aplikasi struktur data mengunakan java, abdul kadir, 2014
2. Varsha H. Patil, Data structures using C++. Oxford University Press. New
Delhi, Oxford University Press 2012,
3. Michael T. Goodrich, Roberto Tamassia, Michael H. Goldwasser, Data
Struktures & algorithms in JAVA 6th published in 2017.
4. Rinaldi Munir, Leony Lidya, Algoritma dan pemrograman : dalam bahasa
pascal, C, dan C++, Bandung : Informatika, 2016.
5. Flowcart ―Computer & Internet Help : Understanding Flowchart Symbols:
http://www.youtube.com/watch?v=xLoL7tlJYws
6. Pseudo-Code - ―https://www.unf.edu/~broggio/cop2221/2221pseu.htm
7. Type Data - Data Types and Names in C http://aelinik.free.fr/c/ch04.htm