Berikut ini adalah pertanyaan dari aryagading pada mata pelajaran TI untuk jenjang Sekolah Menengah Atas
Misal:
Apakah yang benar penulisannya adalah "Subtree kiri dari A adalah B, D, G, E, H, J" atau "Subtree kiri dari A adalah B, D, E, G, H, J"?
Jawaban dan Penjelasan
Berikut ini adalah pilihan jawaban terbaik dari pertanyaan diatas.
- Subtreeadalahtree yang merupakan bagian (subset) dari tree yang lebih besar. Atau dengan kata lain, subtree adalah himpunan semua simpul/node yang berinduk pada sebuah akar/root.
- “Subtree dari D adalah G”merupakan pernyataan yangbenar, karena pada binary tree, memungkinan tree tidak memiliki cabang/simpul/node.
- Kedua cara penulisan subtree kiri dari A merupakan penulisan secara traversal, bukan secara hirarki. Namun begitu, tetap keduanya adalah penulisan subtree yang benar.
"Subtree kiri dari A adalah B, D, G, E, H, J"adalah penulisan subtree menggunakan metodetraversal preorder.
Sedangkan “Subtree kiri dari A adalah B, D, E, G, H, J"adalah penulisan subtree menggunakan metodetraversal level order.
Pembahasan
Sesuai definisinya, struktur tree/pohon dalam informatika atau ilmu komputer merupakan kumpulan elemen (node) di mana terdapat satu elemen akar (root), dan elemen lain terbagi menjadi sejumlah himpunan yang disjoin satu sama lainnya, yang disebut cabang.
Sedangkan subtree pada hakikatnya adalah tree, yang merupakan kumpulan node dan cabang-cabangnya di bawah node induk/akarnya.
Pada pertanyaan ini, jenis tree yang dipaparkan adalah binary tree (pohon biner).
Salah satu karakteristik dari binary tree adalah dimungkinkannya sebuah tree tidak mempunyai simpul/node.
Jadi, karakteristik tersebut yang membuat pernyataan “Subtree dari D adalah G” benar. Walaupun G tidak mempunyai simpul/node, G adalah subtree dari D.
Untuk menjelaskan pertanyaan ketiga, saya buat program sederhana dengan bahasa pemrograman Java, dan data tree diisi sesuai dengan gambar pada pertanyaan.
import java.util.*;
class Simpul {
char info;
Simpul kiri, kanan;
// Konstruktor
public Simpul(char item)
{
info = item;
kiri = kanan = null;
}
}
// Class PohonBiner
class PohonBiner {
// Akar pohon biner
Simpul akar;
// Konstruktor
PohonBiner(char info) { akar = new Simpul(info); }
PohonBiner() { akar = null; }
// Traversal Postorder
public String traversalPostorder(Simpul simpul) { }
// Traversal Inorder
public String traversalInorder(Simpul simpul) { }
// Traversal Preorder
// Fungsi rekursif yang mengembalikan hasil
// traversal preorder dalam bentuk string
public String traversalPreorder(Simpul simpul)
{
if (simpul == null)
return "";
return simpul.info + " "
+ traversalPreorder(simpul.kiri)
+ traversalPreorder(simpul.kanan);
}
// Traversal Level Order
// Fungsi iteratif yang mengembalikan hasil
// traversal level order dalam bentuk string
public String traversalLevelOrder(Simpul simpul)
{
String traversalStr = "";
Queue<Simpul> queue = new LinkedList<Simpul>();
queue.add(simpul);
while (!queue.isEmpty()) {
Simpul tmp = queue.poll();
traversalStr += tmp.info + " ";
//System.out.print(tmp.info + " ");
if (tmp.kiri != null) {
queue.add(tmp.kiri);
}
if (tmp.kanan != null) {
queue.add(tmp.kanan);
}
}
return traversalStr;
}
}
// Class program utama
class TestBinaryTree {
public static void main(String[] args) {
// Inisialisasi pohon biner dengan akar 'A'
PohonBiner pohon = new PohonBiner('A');
// tingkat 1
pohon.akar.kiri = new Simpul('B');
pohon.akar.kanan = new Simpul('C');
// tingkat 2
pohon.akar.kiri.kiri = new Simpul('D');
pohon.akar.kiri.kanan = new Simpul('E');
pohon.akar.kanan.kanan = new Simpul('F');
// tingkat 3
pohon.akar.kiri.kiri.kiri = new Simpul('G');
pohon.akar.kiri.kanan.kiri = new Simpul('H');
pohon.akar.kanan.kanan.kiri = new Simpul('I');
// tingkat 4
pohon.akar.kiri.kanan.kiri.kiri = new Simpul('J');
pohon.akar.kanan.kanan.kiri.kiri = new Simpul('K');
pohon.akar.kanan.kanan.kiri.kanan = new Simpul('L');
// Cetak subtree kiri dari A
System.out.println("TRAVERSAL PREORDER");
System.out.print("⇒ Subtree kiri dari A adalah ");
System.out.println(
pohon.traversalPreorder(pohon.akar.kiri).trim().replace(" ", ", ")
);
System.out.println("TRAVERSAL LEVEL ORDER");
System.out.print("⇒ Subtree kiri dari A adalah ");
System.out.println(
pohon.traversalLevelOrder(pohon.akar.kiri).trim().replace(" ", ", ")
);
System.out.println("");
}
}
Hasil eksekusinya adalah:
TRAVERSAL PREORDER
⇒ Subtree kiri dari A adalah B, D, G, E, H, J
TRAVERSAL LEVEL ORDER
⇒ Subtree kiri dari A adalah B, D, E, G, H, J
(atau dapat dilihat pada gambar yang dilampirkan)
___________________
Detail Jawaban
Mata Pelajaran: Informatika (TIK)
Materi: Algoritma dan Struktur Data - Binary Tree
Semoga dengan pertanyaan yang sudah terjawab oleh henriyulianto dapat membantu memudahkan mengerjakan soal, tugas dan PR sekolah kalian.
Apabila terdapat kesalahan dalam mengerjakan soal, silahkan koreksi jawaban dengan mengirimkan email ke yomemimo.com melalui halaman Contact
Last Update: Sat, 22 Oct 22