Anda di halaman 1dari 8

Mata Kuliah : Stuktur Data & Algoritma

Bobot Sks : 3 sks


Dosen Pengembang : Catur Nugroho, S.Kom., M.Kom
Tutor : Syahid Abdullah, S.Si, M.Kom
Capaian Pembelajaran : Mahasiswa mampu menjelaskan mengenai algoritma Tree
Mata Kuliah
Kompetentsi Akhir Di : Mahasiswa mampu menguasai struktur data hirarki Tree
Setiap Tahap (Sub-
Cpmk)
Minggu Perkuliahan : Sesi 7
Online Ke-

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

2. Istilah-istilah Umum dalam Tree


Beberapa istilah Operasi Tree adalah :
Predecessor : node yang berada di atas node tertentu
Successor : node yang berada di bawah node tertentu.
Ancestor : seluruh node yang terletak sebelum node tertentu dan terletak pada jalur
yang sama.
1
Descendant : seluruh node yang terletak sesudah node tertentu dan terletak
pada jalur yang sama.
Father : predecessor satu level di atas suatu node.
Son : successor satu level di bawah suatu node.
Sibling : node-node yang memiliki father yang sama dengan suatu node.
Subtree : bagian dari tree yang berupa suatu node beserta descendantnya dan
memiliki semua karakteristik dari tree tersebut.
Size : Banyaknya node dalam suatu tree.
Height : Banyaknya tingkatan/level dalam suatu tree.
Root : Satu-satunya node khusus dalam tree yang tak punya predecessor.
Leaf : Node-node dalam tree yang tak memiliki successor.
Degree : Banyaknya son yang dimiliki suatu node.
Contoh :

Gambar 1. Binary Tree


Keterangan :
Ancestor (H) = F,C,A
Descendant (F) = H,I
Father (D) = B
Son (A) = B,C
Sibling (D) = E
Size = 9
Height = 4
Root = A
Leaf = D,G,H,I
Degree (E) = 1
2
3. Beberapa Jenis Tree.
a. Binary Tree
Binary Tree adalah tree dengan syarat bahwa setiap node hanya boleh memiliki
maksimal dua subtree dan kedua subtree tersebut harus terpisah. Dengan demikian,
maka setiap node dalam binary tree hanya boleh memiliki paling banyak dua son
(perhatikan gambar ). Jika A adalah root dari suatu binary tree, maka B dikatakan left
son dari A dan C dikatakan right son dari A. Kemudian A dikatakan father dari B dan
C. Sebuah node yang tidak memiliki son (seperti D, G, H, atau I pada gambar 1)
dinamakan leaf. Node n1 adalah ancestor dari node n2 (dan n2 adalah descendant
dari n1) jika n1 adalah father dari n2 atau father dari beberapa ancestor n2. Seperti
contoh pada gambar 1, A adalah ancestor dari G, dan H adalah descendant dari C,
tapi E bukan ancestor maupun descendant dari C. Node n2 adalah left descendant
dari node n1 jika n2 juga left son dari n1 atau descendant dari left son n1, begitu
sebaliknya untuk right descendant. Dua node dikatakan brothers jika node adalah left
dan right son dari father yang sama. sebuah tree (pohon) yang tumbuh dengan root
(akar) di dalam tanah dan dengan leaf (daun) di udara, dalam ilmu komputer melukiskan
struktur data tree dengan root di atas dan leaf di bagian bawah. Arah dari root menuju
leaf disebut “down” dan sebaliknya disebut “up”. Perpindahan leaf menuju root
dinamakan “climbing”, perpindahan dari root menuju leaf dinamakan “descending”.
b. Beberapa contoh Binary Tree :
• Strictly Binary Tree
Jika setiap node dalam binary tree selalu terdapat left dan right subtree, maka tree
yang demikian dikatakan sebagai strictly binary tree seperti contoh pada gambar
2, sementara gambar 1 tidak dapat dikatakan sebagai strictly binary tree karena
node C dan E masing-masing hanya memiliki satu son. Sebuah strictly binary tree
dengan n leaf selalu terdapat 2n – 1 node.

Gambar 2. strictly binary tree

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

Gambar 3. complete binary tree


4. Binary Search Tree
Binary Search Tree adalah binary tree dengan sifat bahwa semua left son harus
lebih kecil daripada right son dan fathernya. Binary search tree dibuat untuk
mengatasi kelemahan pada binary tree biasa, yaitu kesulitan dalam

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

Anda mungkin juga menyukai