Struktur Data - Studi Kasus Tree

Nama    : Aga Nafta Filadelfiano
NRP      : 5025251055
Kelas     : Struktur Data (D) 

Studi Kasus Tree


Sistem Folder Komputer

Deskripsi Progran

Program ini adalah aplikasi simulasi sistem folder pada komputer yang diimplementasikan dengan menggunakan struktur data General Tree dengan bahasa C++. Program ini dirancang untuk merepresentasikan hierarki direktori yang fleksibel dan dinamis, di mana setiap folder bertindak sebagai node yang memiliki relasi parent-child dan bebas menampung jumlah subfolder (children) yang tidak terbatas karena diakomodasi melalui memori dinamis. 
Melalui program ini, aplikasi mampu:
  • Membuat folder baru
  • Menghapus folder
  • Menampilkan struktur direktori
  • Mencari folder tertentu
  • Menghitung jumlah folder
  • Menampilkan path lengkap suatu folder
Program dibuat dengan ketentuan:
  • Menggunakan struktur Tree non-binary (General Tree)
  • Setiap node merepresentasikan folder
  • Mengimplementasikan traversal
  • Menampilkan hasil dalam bentuk hierarki seperti sistem operasi

Syntax Program:


Output:


Penjelasan Code:
Node(string folderName, Node* p=NULL)
Menginisialisasi folder baru dengan cara menyimpan nama folder ke dalam variabel name dan mengaitkannya dengan alamat dari parent folder pembawanya.

FolderTree()
Melakukan alokasi memori dinamis untuk membuat node utama bernama "Root" yang menjadi titik puncak hierarki dari keseluruhan sistem file.

getRoot()
Mengembalikan pointer dari node "Root" agar dapat digunakan oleh fungsi lain sebagai titik awal penelusuran.

addFolder(Node* parent, string folderName)
Menyisipkan direktori baru di dalam hierarki. Fungsi ini membuat alokasi memori untuk objek node baru dan memasukkannya ke bagian belakang dari daftar vector children milik node parent yang telah ditentukan.

printTree(Node* node, int level = 0)
Menampilkan struktur direktori secara visual. Menggunakan metode rekursif di mana setiap penambahan level kedalaman child akan menambahkan indentasi spasi (  ) dan garis hierarki (|_), sehingga menghasilkan tampilan bertingkat yang rapi layaknya visualisasi file explorer di sistem operasi nyata.

preorder(Node* node)
Melakukan traversal dengan urutan Root ke Child. Program akan mencetak nama node yang sedang dikunjungi terlebih dahulu, sebelum masuk ke dalam rekursi untuk menelusuri dan mencetak seluruh subfoldernya dari urutan paling kiri hingga ke kanan.

postorder(Node* node)
Melakukan traversal dengan urutan Child ke Root. Program akan menelusuri terlebih dahulu hingga ke node child terdalam dan mencetak namanya, barulah fungsi berjalan mundur ke atas untuk mencetak nama node parent-nya.

search(Node* node, string target)
Mencari lokasi folder spesifik menggunakan teknik pencarian Depth First Search (DFS). Jika node dengan nama yang sesuai ditemukan, program akan mengembalikan referensi alamat (pointer) dari node tersebut. Jika setelah ditelusuri hingga ujung percabangan tidak ada yang cocok, fungsi akan mengembalikan nilai NULL.

countFolder(Node* node)
Menghitung jumlah seluruh direktori yang ada di dalam tree. Program menetapkan nilai 1 untuk node induk yang aktif, lalu menjumlahkannya dengan nilai kembalian fungsi ini secara rekursif terhadap seluruh child di bawahnya.

showPath(Node* node)
Menampilkan alamat rute (path) lengkap dari Root menuju direktori tujuan. Fungsi memanfaatkan pointer parent untuk melangkah mundur dari bawah ke atas, menyimpan urutannya di dalam vector, dan kemudian mencetaknya dari indeks terakhir ke awal secara terbalik dengan dibatasi garis miring (/).

deleteSubtree(Node* node)
Membersihkan dan melepaskan alokasi memori dinamis di belakang layar. Fungsi ini menelusuri setiap percabangan anak dan melakukan delete node dari posisi paling bawah ke atas untuk memastikan tidak ada memori sisa (memory leak).

deleteFolder(string folderName)
Menghapus suatu direktori dan seluruh subfolder di dalamnya (subtree). Fungsi ini mencari folder target terlebih dahulu. Jika ditemukan dan target tersebut bukanlah "Root", maka fungsi akan mencabut pointer target dari daftar children parent-nya, lalu memanggil deleteSubtree untuk menghancurkan seluruh isi folder tersebut.


Source Code: GitHub

Postingan populer dari blog ini

Curiculum Vitae - Aga Nafta Filadelfiano

Struktur Data - Studi Kasus Stack

Struktur Data - Tipe Data & Array