Latihan: Manipulasi Daun
Menerapkan rekursif dengan pass-by-reference untuk memodifikasi bentuk pohon, seperti menyisipkan daun baru dan menghapus daun terkiri.
Menerapkan rekursif dengan pass-by-reference untuk memodifikasi bentuk pohon, seperti menyisipkan daun baru dan menghapus daun terkiri.
Anda diminta merancang fitur untuk mengubah struktur organisasi secara langsung. Anda sebagai Admin memiliki hak akses untuk dua jenis tindakan:
AddDaun): Perusahaan merekrut pegawai baru Y. Pegawai ini harus ditempatkan persis sebagai bawahan (anak) dari staf bernama X. Anda juga harus bisa menentukan apakah ia ditaruh di sisi kiri atau kanan.DelDaunTerkiri): Divisi yang berada di cabang paling kiri perusahaan akan ditutup. Anda harus mencari daun (staf tanpa bawahan) yang posisinya berada di ujung paling kiri, mencatat namanya, dan menghapus datanya dari sistem (bersihkan dari memori komputer).Perhatikan pohon berikut. Jika 'D' dihapus, maka 'B' akan kehilangan anak kirinya:
Lengkapi kedua fungsi manipulasi memori berikut :
AddDaun: Cari posisi simpul X. Begitu ketemu, gantungkan simpul baru Y ke lengannya. Pastikan X saat ini adalah daun sebelum ditambahkan anak.DelDaunTerkiri: Fungsi ini selalu bergerak ke kiri. Namun jika ternyata cabang kiri kosong dan ia hanya memiliki cabang kanan, barulah ia terpaksa mencari ke kanan. Begitu sampai di ujung daun, amankan nilainya, putus koneksi induknya menjadi NULL, lalu bebaskan memori (delete).Program akan mencetak struktur pohon setiap kali ada modifikasi, menunjukkan urutan data yang terhubung dan yang berhasil dihapus.
Akar pohon berisi 'A' dengan anak kiri 'B' dan kanan 'C'. 'D' akan menempel di bawah 'B', dan 'E' menempel di bawah 'C'. Saat dihapus, simpul paling kiri ('D') akan hilang.
Output:
=== RESTRUKTURISASI PERUSAHAAN (MANIPULASI DAUN) ===
Struktur Awal (PreOrder): A B C
[Aksi] Menambah 'D' sebagai anak kiri dari 'B'...
[Aksi] Menambah 'E' sebagai anak kanan dari 'C'...
Struktur Baru (PreOrder): A B D C E
[Aksi] Memberhentikan staf paling kiri...
Staf yang berhenti: D
Struktur Akhir (PreOrder): A B C E Hint: Penggunaan Pointer Ganda
Perhatikan tipe parameterNode **P. Karena kamu ingin mengubah nilai pointer asli milik induk (supaya menjadiNULLatau menunjuk keNodebaru), kamu wajib mengirimkan alamat memori dari pointer tersebut menggunakan tanda&.Contoh:
DelDaunTerkiri(&((*P)->left), x);