Praktikum Struktur Data 2024/2025 – TREE
A. TUJUAN PEMBELAJARAN
Setelah menyelesaikan praktikum ini, mahasiswa diharapkan mampu:
1. Memahami konsep dasar struktur data pohon (tree) dan terminologi penting di
dalamnya.
2. Mengimplementasikan Binary Tree dan Binary Search Tree (BST) dalam Python.
3. Menerapkan operasi dasar pada pohon seperti penyisipan, traversal (preorder,
inorder, postorder), dan pencarian elemen.
4. Mengembangkan logika program berbasis pohon untuk menyelesaikan studi kasus
sederhana.
B. DASAR TEORI
Dalam pemrograman, pemilihan struktur data yang tepat sangat penting untuk
memastikan efisiensi pengolahan data dan kemudahan dalam pengembangan algoritma.
Salah satu struktur data non-linear yang sering digunakan adalah Tree, terutama ketika data
memiliki hubungan bertingkat atau hierarkis. Tree memungkinkan kita untuk menyimpan dan
mengakses informasi secara sistematis berdasarkan hubungan antar elemen, bukan sekadar
urutan linier.
Untuk memahami lebih lanjut tentang struktur data ini, kita akan membahas beberapa
konsep penting, mulai dari pengertian dasar tree dan terminologi umumnya, hingga jenis-jenis
khusus seperti Binary Tree dan Binary Search Tree (BST). Kita juga akan membahas berbagai
operasi yang dapat dilakukan pada tree, serta manfaat dan tantangan penggunaannya dalam
aplikasi nyata.
1. Pengertian Tree
Struktur data Tree adalah struktur data non-linear yang tersusun secara hierarkis, terdiri
dari elemen-elemen yang disebut node. Setiap tree memiliki satu node utama yang disebut
root, dan node lainnya terhubung sebagai anak (child) dari node sebelumnya. Hubungan
antara node dihubungkan oleh edge, dan tree tidak boleh membentuk siklus. Tree hanya
memiliki satu jalur dari root ke setiap node, dan struktur ini sangat efisien untuk menyimpan
data yang saling berelasi dalam bentuk bertingkat.
Dalam kehidupan sehari-hari, kita bisa membayangkan tree seperti silsilah keluarga.
Misalnya, seorang kakek menjadi root, lalu memiliki dua anak (ayah dan paman), kemudian
masing-masing memiliki anak lagi. Setiap orang dalam silsilah itu merepresentasikan node,
dan hubungan orang tua dan anak menjadi edge. Contoh lain adalah struktur organisasi dalam
institusi atau perusahaan, di mana direktur berada di puncak dan membawahi manajer, lalu
staf di bawahnya. Tree juga dapat dianalogikan seperti folder dalam komputer, di mana satu
folder utama (root) berisi subfolder atau file, dan setiap subfolder juga bisa berisi struktur
yang sama secara rekursif.
Secara umum, cara kerja tree mengikuti pola berbasis parent-child. Kita dapat memulai dari
root dan menelusuri anak-anaknya, atau sebaliknya. Tree memudahkan pencarian data secara
bertingkat karena setiap jalur hanya memiliki satu arah yang pasti dari root menuju node
tertentu. Hal ini menjadikan tree sangat berguna dalam proses pencarian, pengurutan data,
1
Praktikum Struktur Data 2024/2025 – TREE
serta dalam algoritma penting seperti evaluasi ekspresi matematika, sistem basis data, dan
struktur file.
2. Jenis-jenis Tree
Dalam praktik pemrograman, terdapat beberapa jenis tree yang digunakan tergantung
pada kebutuhan dan karakteristik data yang ingin disimpan atau diolah. Meskipun semua jenis
tree memiliki konsep dasar yang sama, yaitu struktur hierarkis berbasis node dan edge, setiap
jenis tree memiliki aturan dan fungsi yang khas.
2.1 Binary Tree
Binary Tree adalah jenis struktur data pohon di mana setiap node maksimal memiliki dua
anak, yaitu anak kiri (left child) dan anak kanan (right child). Struktur ini menjadi dasar dari
banyak algoritma dan digunakan secara luas dalam pemrosesan data yang memerlukan
percabangan dua arah. Binary Tree dapat memiliki berbagai bentuk, tergantung dari cara
elemen-elemen dimasukkan ke dalamnya.
Beberapa istilah penting dalam binary tree antara lain:
• Root: node utama tempat traversal dimulai.
• Leaf Node: node yang tidak memiliki anak.
• Internal Node: node yang memiliki minimal satu anak.
• Height/Depth: panjang jalur dari root ke node terdalam.
• Level: menunjukkan kedalaman node dihitung dari root.
• Subtree: bagian dari tree yang terdiri dari sebuah node dan seluruh keturunannya.
Berdasarkan susunan dan kondisi cabangnya, binary tree memiliki beberapa variasi,
seperti:
• Full Binary Tree, yaitu setiap node memiliki tepat dua anak atau tidak memiliki anak
sama sekali.
• Complete Binary Tree, yaitu semua level terisi penuh kecuali level terakhir yang diisi
dari kiri ke kanan.
• Perfect Binary Tree, yaitu tree yang semua node-nya memiliki dua anak dan semua
daun berada di level yang sama.
• Skewed Binary Tree, yaitu tree yang tidak seimbang, semua anak hanya di kiri atau
kanan saja (mirip linked list).
Cara kerja binary tree dimulai dari root, kemudian menyebar ke kiri dan kanan secara
rekursif. Traversal data dilakukan melalui tiga metode utama: preorder (root → left → right),
inorder (left → root → right), dan postorder (left → right → root). Proses ini memungkinkan
kita mengakses semua elemen dalam tree sesuai dengan urutan atau struktur yang diinginkan.
Sebagai analogi, binary tree bisa digambarkan seperti sistem folder komputer, di mana
satu folder utama memiliki dua subfolder. Setiap subfolder pun dapat memiliki dua subfolder
lagi, dan seterusnya. Contoh lain yang lebih nyata adalah pohon keputusan dalam permainan
2
Praktikum Struktur Data 2024/2025 – TREE
catur atau dalam proses diagnosa medis, di mana setiap keputusan atau kondisi memiliki dua
kemungkinan lanjutan.
Kelebihan Binary Tree:
• Memungkinkan representasi data hierarkis yang efisien.
• Cocok untuk traversal rekursif dengan tiga metode utama.
• Lebih hemat memori dibandingkan n-ary tree karena hanya butuh dua pointer per
node.
Kekurangan Binary Tree:
• Tidak menjamin efisiensi pencarian jika struktur tidak seimbang.
• Tidak cocok untuk data yang perlu lebih dari dua anak per node.
• Perlu penyeimbangan ulang jika ingin menjaga performa optimal dalam operasi besar.
2.2 Binary Search Tree
Binary Search Tree (BST) adalah bentuk khusus dari binary tree yang memiliki aturan
penempatan nilai: semua nilai di anak kiri harus lebih kecil dari nilai di node induk, dan semua
nilai di anak kanan harus lebih besar. Aturan ini menciptakan struktur yang teratur dan efisien
untuk operasi pencarian, penyisipan, dan penghapusan data.
Terminologi yang digunakan dalam BST pada dasarnya sama seperti binary tree, namun
penekanan utamanya terletak pada urutan nilai. Setiap kali data baru akan dimasukkan,
perbandingan dilakukan secara berurutan dari root, ke anak kiri atau kanan, hingga
menemukan posisi yang sesuai. Proses pencarian juga mengikuti pola yang sama: data dicari
dengan membandingkannya terhadap node saat ini, lalu bergerak ke kiri atau kanan sesuai
hasil perbandingan.
Sebagai analogi, BST mirip dengan buku telepon atau kamus. Saat kita mencari sebuah
nama, kita tidak membaca dari awal, tetapi langsung menuju bagian tengah, lalu
mempersempit pencarian ke atas atau bawah. Dalam BST, kita juga menggunakan prinsip
serupa: melakukan pencarian berdasarkan arah, sehingga tidak perlu memeriksa semua
elemen satu per satu.
Cara kerja BST sangat bergantung pada urutan data yang dimasukkan. Jika data
dimasukkan secara acak dan seimbang, maka BST dapat memberikan waktu pencarian rata-
rata O(log n). Namun, jika data dimasukkan secara urut menaik atau menurun, maka struktur
pohon akan mirip linked list dan performa turun menjadi O(n).
Kelebihan BST:
• Operasi pencarian, penyisipan, dan penghapusan bisa dilakukan secara efisien dengan
waktu rata-rata O(log n).
• Struktur alami BST memungkinkan traversal inorder menghasilkan data yang terurut.
• Cocok digunakan dalam aplikasi yang membutuhkan pencarian cepat dan pengurutan,
seperti sistem indeks database, autocomplete, dan compiler.
3
Praktikum Struktur Data 2024/2025 – TREE
Kekurangan BST:
• BST tidak menjamin keseimbangan; jika data tidak merata, performanya bisa turun
drastis.
• Perlu tambahan algoritma balancing seperti AVL atau Red-Black Tree agar performa
tetap optimal.
• Penghapusan node dalam BST lebih kompleks dibanding penyisipan atau pencarian,
terutama jika node memiliki dua anak.
3. Traversal pada Tree
Traversal pada tree adalah proses untuk mengunjungi setiap node dalam struktur pohon
secara sistematis. Tujuan traversal adalah untuk membaca, memproses, atau menampilkan isi
tree sesuai urutan tertentu. Tidak seperti array atau linked list yang bisa diakses langsung
dengan indeks, node pada tree harus diakses melalui penelusuran berdasarkan relasi parent-
child.
Terdapat tiga metode traversal utama yang digunakan pada Binary Tree dan BST:
1. Preorder Traversal (Root → Left → Right)
Pada metode ini, proses dimulai dari node akar terlebih dahulu, kemudian
melanjutkan ke anak kiri dan akhirnya ke anak kanan. Traversal preorder banyak
digunakan dalam pembuatan salinan tree atau rekonstruksi tree dari ekspresi prefix.
2. Inorder Traversal (Left → Root → Right)
Inorder traversal merupakan metode paling umum pada BST karena akan
menghasilkan urutan nilai dari kecil ke besar. Proses diawali dengan menelusuri anak
kiri, kemudian memproses node induk, dan akhirnya anak kanan. Metode ini sering
digunakan ketika kita ingin mencetak data BST secara terurut.
3. Postorder Traversal (Left → Right → Root)
Traversal ini memproses seluruh subtree terlebih dahulu, baru kemudian node
induknya. Ini berguna dalam kasus penghapusan struktur tree, evaluasi ekspresi
postfix, dan saat ingin memproses semua dependensi sebelum memproses root-nya.
Untuk mempermudah pemahaman, analogi traversal dapat dilihat seperti saat kita
mengunjungi rumah bertingkat. Pada preorder, kita mencatat informasi begitu masuk ke
rumah (root) sebelum menjelajahi sisi kiri dan kanan. Pada inorder, kita menjelajah sisi kiri
dulu, baru mencatat informasi utama, dan akhirnya ke kanan. Sedangkan pada postorder, kita
menjelajah seluruh bagian rumah terlebih dahulu, baru mencatat saat meninggalkan rumah.
Traversal ini biasanya diimplementasikan secara rekursif, namun juga dapat dilakukan secara
iteratif menggunakan struktur data seperti stack. Dalam praktiknya, pemilihan jenis traversal
tergantung pada tujuan spesifik, misalnya menampilkan data terurut, mengevaluasi ekspresi,
atau menghapus node secara berurutan.
4
Praktikum Struktur Data 2024/2025 – TREE
C. LANGKAH PRAKTIKUM
Pada praktikum ini, mahasiswa akan mengimplementasikan struktur data Tree
menggunakan Python, dimulai dari binary tree biasa hingga Binary Search Tree (BST).
Praktikum mencakup pembuatan node, penyisipan data, traversal, serta pencarian elemen.
Mahasiswa diharapkan mampu memahami bagaimana data dalam tree disusun dan ditelusuri
secara rekursif.
1. Membuat Binary Tree Secara Manual
Langkah awal adalah membuat tree dengan struktur dasar Node, lalu menyusun tree
secara manual tanpa aturan BST. Cobalah kode berikut dan perhatikan struktur tree
yang terbentuk:
Contoh Kode Program:
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
# Membuat tree secara manual
root = Node(1)
root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)
root.left.right = Node(5)
# Fungsi inorder traversal
def inorder(node):
if node:
inorder(node.left)
print(node.data, end=' ')
inorder(node.right)
print("Hasil inorder traversal dari binary tree:")
inorder(root)
Penjelasan:
Kode ini membuat sebuah binary tree secara manual. Kelas Node berisi data serta
pointer ke anak kiri dan kanan. Kita membuat node root sebagai akar pohon, lalu
menambahkan anak-anaknya secara eksplisit. Fungsi inorder() digunakan untuk
menelusuri tree dari node terkiri, kemudian induknya, lalu anak kanan. Output dari
fungsi ini akan mencetak urutan node berdasarkan struktur tersebut.
2. Membuat Binary Search Tree
Sekarang kita akan membangun tree secara otomatis berdasarkan aturan BST, di mana
data lebih kecil dari root akan diletakkan di kiri, dan data lebih besar di kanan.
Contoh Kode Program:
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
class BinarySearchTree:
def __init__(self):
self.root = None
5
Praktikum Struktur Data 2024/2025 – TREE
def insert(self, root, data):
if root is None:
return Node(data)
if data < root.data:
root.left = self.insert(root.left, data)
else:
root.right = self.insert(root.right, data)
return root
bst = BinarySearchTree()
root = None
data_list = [50, 30, 70, 20, 40, 60, 80]
for value in data_list:
root = bst.insert(root, value)
Penjelasan:
Bagian ini memperkenalkan class BinarySearchTree dan fungsi insert() yang
menyisipkan data sesuai aturan BST. Jika node kosong, maka node baru dibuat. Jika
data lebih kecil dari nilai induk, data diletakkan di anak kiri, jika lebih besar, di anak
kanan. Daftar data_list digunakan untuk menguji fungsi penyisipan, dan tree akan
terbentuk secara otomatis tanpa perlu pengaturan manual. Hasil akhirnya adalah BST
yang terstruktur sesuai urutan penyisipan data.
Dengan menyisipkan data seperti di atas, tree akan terbentuk mengikuti aturan BST.
Tidak perlu mengatur cabang secara manual karena aturan BST akan otomatis
menempatkan data pada posisi yang benar.
3. Traversal pada BST
Setelah tree terbentuk, kita akan membuat tiga jenis traversal untuk menelusuri isi
tree: preorder, inorder, dan postorder.
Contoh Kode Program:
def inorder(node):
if node:
inorder(node.left)
print(node.data, end=' ')
inorder(node.right)
def preorder(node):
if node:
print(node.data, end=' ')
preorder(node.left)
preorder(node.right)
def postorder(node):
if node:
postorder(node.left)
postorder(node.right)
print(node.data, end=' ')
print("Inorder Traversal:")
inorder(root)
print("\nPreorder Traversal:")
preorder(root)
print("\nPostorder Traversal:")
postorder(root)
Penjelasan:
Tiga jenis traversal digunakan untuk menelusuri BST:
6
Praktikum Struktur Data 2024/2025 – TREE
• Inorder: menampilkan data dari terkecil ke terbesar.
• Preorder: berguna untuk mencetak struktur tree dari root ke bawah.
• Postorder: mencetak node setelah seluruh subtree-nya selesai diproses.
Setiap fungsi memanggil dirinya sendiri secara rekursif ke anak kiri dan kanan sesuai
urutan traversal. Mahasiswa dapat melihat perbedaan urutan output dari masing-
masing metode dan memahami cara penelusuran tree.
4. Pencarian Nilai dalam BST
Kita akan mencoba mencari elemen dalam BST menggunakan metode rekursif.
Perhatikan bagaimana pencarian mengikuti aturan pohon untuk menentukan arah
pencarian.
Contoh Kode Program:
def search(node, key):
if node is None or node.data == key:
return node
if key < node.data:
return search(node.left, key)
return search(node.right, key)
# Uji pencarian
key = 60
result = search(root, key)
if result:
print(f"{key} ditemukan dalam tree.")
else:
print(f"{key} tidak ditemukan.")
key = 25
result = search(root, key)
if result:
print(f"{key} ditemukan dalam tree.")
else:
print(f"{key} tidak ditemukan.")
Penjelasan:
Fungsi search() digunakan untuk mencari elemen dalam BST. Algoritma bekerja dengan
membandingkan nilai target dengan nilai node saat ini. Jika sama, node dikembalikan.
Jika lebih kecil, pencarian dilanjutkan ke subtree kiri; jika lebih besar, ke subtree kanan.
Program akan mencetak apakah data ditemukan atau tidak.
D. LATIHAN / TUGAS
Untuk memperdalam pemahaman terhadap struktur Binary Tree dan Binary Search Tree
(BST), lakukan implementasi program berikut berdasarkan data yang disesuaikan dengan
identitas pribadi Anda.
Tugas 1: Program Struktur Binary Tree Manual
Deskripsi:
Buat program Python untuk membangun binary tree secara manual (bukan BST) berdasarkan
data yang Anda olah dari nama dan NPM.
Ketentuan:
7
Praktikum Struktur Data 2024/2025 – TREE
• Node root adalah jumlah huruf pada nama lengkap Anda.
• Anak kiri root: jumlah huruf vokal (a, i, u, e, o) pada nama Anda.
• Anak kanan root: dua digit terakhir dari NPM Anda.
• Tambahkan satu level lagi (anak dari anak) berdasarkan tanggal lahir Anda:
o Anak kiri dari node kiri: tanggal (DD).
o Anak kanan dari node kanan: bulan (MM).
• Tampilkan tree dengan inorder traversal.
Output yang Diharapkan:
• Struktur tree ditampilkan menggunakan print traversal.
• Tambahkan komentar di atas program: "Struktur Tree berdasarkan identitas saya".
Tugas 2: Program Binary Search Tree (BST)
Deskripsi:
Buat program Python untuk membentuk BST secara otomatis dari data numerik yang unik bagi
Anda.
Ketentuan:
• Buat daftar 7 angka dengan aturan berikut:
1. Tiga digit terakhir NPM Anda
2. Tanggal lahir (DDMM, pisahkan menjadi dua angka: DD dan MM)
3. ASCII dari huruf pertama dan kedua nama depan Anda
4. Tambahkan dua angka bebas (boleh favorit Anda)
• Sisipkan semua angka tersebut ke dalam BST.
• Tampilkan hasil traversal:
o Inorder
o Preorder
o Postorder
• Tambahkan fitur pencarian:
o Cari angka dengan nilai dua digit terakhir NPM Anda
o Cari angka yang tidak termasuk dalam list (buat sendiri)
Output yang Diharapkan:
• Hasil setiap traversal tercetak rapi
• Hasil pencarian menunjukkan apakah data ditemukan atau tidak
• Tambahkan komentar penjelasan pendek di setiap bagian kode