BST, penjelasan fungsi dan kegunaan
Nama : Fakhrian Elanta
NRP : 5025251019
Kelas : D
Full Code :
1. Fungsi Utama / Publik (Interface BST)
Fungsi-fungsi ini adalah interface yang dipanggil oleh pengguna dari luar struktur data (seperti di dalam fungsi main).
void init()
Inisialisasi objek BST saat pertama kali dibuat. Fungsi ini memastikan pointer akar (
_root) bernilaiNULLdan ukuran pohon (_size) dimulai dari 0.bool isEmpty()
Memeriksa apakah pohon kosong atau tidak. Mengembalikan nilai
truejika_rootmasihNULL, danfalsejika sudah terisi data.bool find(int value)
Mencari keberadaan suatu nilai di dalam pohon. Fungsi ini memanggil utilitas privat
__search(). Jika nilai ditemukan, ia mengembalikantrue; jika tidak, mengembalikanfalse.void insert(int value)
Memasukkan nilai baru ke dalam pohon. Fungsi ini memeriksa terlebih dahulu menggunakan
find(value)agar tidak ada nilai duplikat (karena ini dirancang sebagai unique BST). Jika belum ada, data dimasukkan dan ukuran pohon (_size) ditambah.void remove(int value)
Menghapus nilai dari pohon jika nilai tersebut ditemukan.
void traverseInorder(),traversePreorder(),traversePostorder()Fungsi pembuka untuk mencetak/menelusuri semua elemen pohon dengan urutan tertentu. Fungsi-fungsi ini bertindak sebagai jembatan untuk memanggil fungsi utilitas rekursifnya masing-masing dengan menyerahkan
_rootsebagai titik mulainya.int maxnode()
Mencari dan mengembalikan skor/nilai tertinggi di dalam pohon. Fungsi ini memanfaatkan sifat BST di mana nilai terbesar selalu berada di ujung paling kanan pohon. Jika pohon kosong, fungsi mengembalikan
-1.
2. Fungsi Utilitas Privat (Helper Functions)
Fungsi-fungsi ini diawali dengan dua garis bawah (__) dan berada di bawah akses private. Fungsinya adalah menyelesaikan operasi-operasi kompleks di balik layar, biasanya menggunakan teknik rekursif atau perulangan (loop).
Manajemen Node & Pencarian
BSTNode* __createNode(int value)
Mengalokasikan memori baru di heap menggunakan
mallocuntuk membuat sebuah node baru, mengisi datanya denganvalue, serta mengatur pointer anak kiri (left) dan kanan (right) menjadiNULL.BSTNode* __search(BSTNode *root, int value)
Melakukan pencarian nilai menggunakan perulangan (
while). Jika nilai yang dicari lebih kecil dari node saat ini, pencarian bergeser ke kiri. Jika lebih besar, bergeser ke kanan. Jika sama, node tersebut langsung dikembalikan.BSTNode* __insert(BSTNode *root, int value)
Menempatkan node baru secara rekursif. Fungsi ini menelusuri pohon ke kiri atau ke kanan sesuai aturan BST hingga menemukan posisi kosong (
NULL), lalu membuat node baru di sana menggunakan__createNode.
Penghapusan & Optimasi Pencarian Nilai Ekstrem
BSTNode* __findMinNode(BSTNode *node)
Mencari node dengan nilai terkecil mulai dari titik
nodeyang diberikan. Caranya dengan terus berjalan ke cabang paling kiri (currNode->left) hingga mentok.BSTNode* __findMaxNode(BSTNode *node)
Mencari node dengan nilai terbesar mulai dari titik
nodeyang diberikan. Caranya dengan terus berjalan ke cabang paling kanan (currNode->right) hingga mentok. Fungsi inilah yang mendasari logika pencarian skor tertinggi padamaxnode().BSTNode* __remove(BSTNode *root, int value)
Fungsi rekursif untuk menghapus node. Fungsi ini menangani 3 kondisi penghapusan:
Node yang dihapus tidak punya anak (langsung dihapus).
Node hanya punya 1 anak (anaknya naik menggantikan posisi node tersebut).
Node punya 2 anak (mencari nilai terkecil di cabang kanan menggunakan
__findMinNodeuntuk menggantikan node yang dihapus, lalu menghapus node duplikatnya).
Penelusuran Pohon (Tree Traversal)
void __inorder(BSTNode *root)
Menelusuri pohon dengan urutan: Kiri $\rightarrow$ Akar $\rightarrow$ Kanan. Pada BST, cara ini otomatis akan mencetak data secara berurutan dari yang terkecil hingga terbesar.
void __preorder(BSTNode *root)
Menelusuri pohon dengan urutan: Akar $\rightarrow$ Kiri $\rightarrow$ Kanan. Biasanya digunakan untuk menduplikasi atau mengkloning struktur pohon.
void __postorder(BSTNode *root)
Menelusuri pohon dengan urutan: Kiri $\rightarrow$ Kanan $\rightarrow$ Akar. Biasanya digunakan saat proses penghapusan seluruh pohon dari memori (destruksi).
3. Fungsi Utama Program
int main()
Tempat program pertama kali dieksekusi. Fungsi ini membuat objek pohon bernama
set, meminta input dari pengguna mengenai berapa banyak skor yang ingin dimasukkan, melakukan perulangan untuk memasukkan skor-skor tersebut ke dalam BST menggunakan fungsiinsert(), dan terakhir menampilkan skor tertinggi menggunakan fungsimaxnode().
Komentar
Posting Komentar