Implementasi Tree

Tugas Pertemuan ke-11

Di bawah ini adalah dokumentasi code-code beserta penjelasannya tentang NON-LINEAR TREE (FILE SYSTEM).

PROGRAM IMPLEMENTASI FILE SYSTEM TREE DAN ALGORITMA TRAVERSAL

Program ini mengimplementasikan struktur data Tree umum (N-ary Tree) untuk mensimulasikan sistem direktori atau folder pada komputer. Berbeda dengan Binary Tree biasa, setiap folder (node) di dalam program ini dapat memiliki banyak cabang sekaligus (menggunakan bantuan vector). Program ini mendemonstrasikan bagaimana sebuah folder disusun secara hierarkis serta cara menelusurinya.


Output:

|-- Root
   |-- Documents
      |-- College
      |-- Assignments
   |-- Pictures
   |-- Music

Preorder Traversal: Root Documents College Assignments Pictures Music 
Postorder Traversal: College Assignments Documents Pictures Music Root 

Program ini mendemonstrasikan pembuatan simulasi manajemen direktori komputer menggunakan pohon berakar (Rooted Tree). Elemen utama yang digunakan adalah struct Folder yang menyimpan nama folder, pointer ke induknya (parent), dan sebuah dinamik array (vector<Folder*>) untuk menampung seluruh anak-anak foldernya secara fleksibel. Penelusuran struktur dilakukan dengan metode visual displayTree untuk mencetak struktur folder bertingkat, serta mengaplikasikan algoritma Preorder (Kunjungi folder, lalu telusuri isinya) dan Postorder (Selesaikan semua sub-folder terbawah, baru kembali ke folder induk).

Link Github Repository


📂 Mengapa Belajar Tree Melalui Sistem Folder Itu Paling Gampang?

Saat pertama kali belajar struktur data Tree, kebanyakan dari kita langsung disuguhkan rumus matematika atau pohon biner yang kaku. Padahal, sadar atau tidak, setiap hari kita menggunakan Tree saat membuka laptop atau HP!

Ya, sistem folder (direktori) di Windows Explorer atau macOS Finder adalah contoh nyata dari penerapan struktur data Tree di kehidupan nyata.

🪵 Analogi Sederhana Komponen Tree

Mari kita bedah kode FileSystemTree.cpp di atas menggunakan bahasa sehari-hari melalui visualisasi hierarki berikut:

       [Root]
      /   |   \
[Docs] [Pics] [Music]
  /  \
[Coll] [Asg]
  1. Root (Akar): Ini adalah folder induk tertinggi. Di Windows biasanya disebut C: atau D:, sedangkan di kode kita diberi nama "Root".
  2. Node (Simpul): Setiap folder yang kita buat (Documents, Pictures, Music) disebut sebagai Node.
  3. Children (Anak): Folder yang berada di dalam folder lain. Contohnya: College dan Assignments adalah anak dari folder Documents.
  4. Parent (Induk): Folder Documents adalah induk langsung dari folder College.

🧭 Rahasia Di Balik Preorder dan Postorder Traversal

Traversal itu bahasa keren dari "cara kita berjalan-jalan keliling folder". Di kode tadi, ada dua cara jalan-jalan yang hasilnya berbeda total:

1. Preorder Traversal (Cetak Dulu, Baru Masuk)

Cara kerja Preorder adalah mendatangi foldernya dulu, mencetak namanya, baru melihat apa saja isi di dalamnya.

  • Bayangkan seperti: Anda sedang melakukan inspeksi gedung sekolah. Anda catat dulu nama ruangannya di papan klip, baru Anda masuk melihat isinya.
  • Hasil di kode: Root ➔ Documents ➔ College ➔ Assignments ➔ Pictures ➔ Music

2. Postorder Traversal (Masuk Paling Dalam, Baru Cetak saat Keluar)

Cara kerja Postorder terbalik. Program dipaksa menyelam ke folder paling ujung/dalam yang sudah tidak punya sub-folder lagi, baru mencetak namanya sambil berjalan mundur ke arah pulang (Root).

  • Bayangkan seperti: Anda sedang menghapus folder (Delete). Sistem operasi tidak akan bisa menghapus folder Documents kalau di dalamnya masih ada folder isi. Sistem harus menghapus College dan Assignments dulu sampai kosong, baru folder Documents bisa ikut terhapus dengan aman.
  • Hasil di kode: College ➔ Assignments ➔ Documents ➔ Pictures ➔ Music ➔ Root

💡 Mengapa Kode Ini Menggunakan Vector, Bukan Left/Right?

Pada struktur Binary Tree tradisional, satu node cuma boleh punya maksimal 2 anak (Kiri dan Kanan saja). Tapi di komputer asli, kita bebas membuat puluhan folder di dalam satu folder tunggal, bukan?

Itulah mengapa kode di atas menggunakan perintah vector<Folder*> children. Karena sifat vector di C++ itu dinamis, folder kita bisa menyimpan anak sebanyak apa pun tanpa terpatok batasan kuota cabang!

Comments

Popular posts from this blog

Documentation C++ Programming

Evaluasi Tengah Semester (ETS)