Contoh Program Binary Tree pada Java: Struktur Data dan Implementasinya

Contoh Program Binary Tree pada Java: Struktur Data dan Implementasinya
Konten Halaman

Pada artikel ini, kita akan membahas salah satu struktur data fundamental dalam ilmu komputer, yaitu binary tree, dan bagaimana mengimplementasikannya dalam bahasa pemrograman Java.

Binary tree merupakan salah satu struktur data yang sering digunakan dalam pengembangan perangkat lunak untuk melakukan pencarian, penyimpanan, dan pengurutan data.

Dalam artikel ini, kita akan membahas konsep binary tree secara rinci, mempelajari cara mengimplementasikan binary tree dalam Java, dan melihat beberapa contoh program binary tree pada Java.

Apa itu Binary Tree?

Binary tree adalah struktur data hirarkis yang terdiri dari simpul-simpul yang terhubung oleh sisi-sisi atau garis. Setiap simpul dalam binary tree memiliki dua anak (atau kurang, dalam kasus leaf node), yaitu anak kiri dan anak kanan. Anak kiri dan anak kanan dapat berupa simpul-simpul lain atau null.

Berikut adalah beberapa istilah yang sering digunakan dalam binary tree:

  • Root node: simpul awal atau simpul atas dalam sebuah binary tree.
  • Parent node: simpul yang memiliki anak.
  • Child node: simpul yang menjadi anak dari simpul induk.
  • Leaf node: simpul yang tidak memiliki anak.
  • Sibling: dua simpul yang memiliki induk yang sama.
  • Depth: jarak antara root node dengan suatu simpul.
  • Height: jarak terjauh dari suatu simpul ke simpul leaf node di bawahnya.

Implementasi Binary Tree dalam Java

Untuk mengimplementasikan binary tree dalam Java, kita dapat menggunakan class yang terdiri dari simpul-simpul yang terhubung. Setiap simpul dalam binary tree dapat diwakili oleh sebuah class yang terdiri dari data, anak kiri, dan anak kanan.

Berikut adalah contoh implementasi class Node dalam Java:

class Node {
    int data;
    Node left, right;

    public Node(int item) {
        data = item;
        left = right = null;
    }
}

Pada class Node di atas, terdapat tiga variabel instance: data, left, dan right. Variabel data menyimpan data yang disimpan dalam simpul, sedangkan left dan right menyimpan referensi ke simpul anak kiri dan anak kanan.

Setelah membuat class Node, kita dapat membuat class BinaryTree yang berfungsi untuk mengatur struktur binary tree. Berikut adalah contoh implementasi class BinaryTree dalam Java:

class BinaryTree {
    Node root;

    BinaryTree(int key) {
        root = new Node(key);
    }

    BinaryTree() {
        root = null;
    }
}

Pada class BinaryTree di atas, terdapat dua konstruktor. Konstruktor pertama digunakan untuk membuat binary tree dengan satu simpul sebagai root node. Konstruktor kedua digunakan untuk membuat binary tree kosong.

Setelah membuat class BinaryTree, kita dapat menambahkan fungsi-fungsi untuk melakukan operasi-operasi pada binary tree, seperti penambahan simpul dan pencarian simpul.

Contoh Program Binary Tree pada Java

Berikut adalah beberapa contoh program binary tree pada Java:

Contoh 1: Penambahan simpul pada binary tree

public class BinarySearchTree {
Node root;

    class Node {
        int key;
        Node left, right;

        public Node(int item) {
            key = item;
            left = right = null;
        }
    }

    public BinarySearchTree() {
        root = null;
    }

    public void insert(int key) {
        root = insertRec(root, key);
    }

    public Node insertRec(Node root, int key) {
        if (root == null) {
            root = new Node(key);
            return root;
        }

        if (key < root.key)
            root.left = insertRec(root.left, key);
        else if (key > root.key)
            root.right = insertRec(root.right, key);

        return root;
    }

    public static void main(String[] args) {
        BinarySearchTree tree = new BinarySearchTree();

        tree.insert(50);
        tree.insert(30);
        tree.insert(20);
        tree.insert(40);
        tree.insert(70);
        tree.insert(60);
        tree.insert(80);
    }

}

Pada contoh program di atas, kita membuat class BinarySearchTree yang berisi class Node dan fungsi-fungsi untuk melakukan operasi pada binary search tree, seperti penambahan simpul. Dalam fungsi insert, kita memeriksa apakah root node sudah ada atau belum. Jika belum, maka kita membuat root node baru. Jika sudah ada, kita memeriksa apakah simpul yang akan ditambahkan lebih kecil atau lebih besar dari root node. Jika lebih kecil, simpul tersebut akan ditambahkan pada anak kiri root node, dan sebaliknya.

Contoh 2: Pencarian simpul pada binary tree

public class BinaryTree {
Node root;

    class Node {
        int key;
        Node left, right;

        public Node(int item) {
            key = item;
            left = right = null;
        }
    }

    public Node search(Node root, int key) {
        if (root == null || root.key == key)
            return root;

        if (root.key > key)
            return search(root.left, key);

        return search(root.right, key);
    }

    public static void main(String[] args) {
        BinaryTree tree = new BinaryTree();

        tree.root = new Node(50);
        tree.root.left = new Node(30);
        tree.root.right = new Node(70);
        tree.root.left.left = new Node(20);
        tree.root.left.right = new Node(40);
        tree.root.right.left = new Node(60);
        tree.root.right.right = new Node(80);

        Node result = tree.search(tree.root, 40);

        if (result == null)
            System.out.println("Simpul tidak ditemukan");
        else
            System.out.println("Simpul ditemukan");
    }

}

Pada contoh program di atas, kita membuat class BinaryTree yang berisi class Node dan fungsi-fungsi untuk melakukan operasi pada binary tree, seperti pencarian simpul. Dalam fungsi search, kita memeriksa apakah simpul yang dicari sudah ditemukan atau belum. Jika simpul sudah ditemukan, maka fungsi akan mengembalikan simpul tersebut. Jika simpul belum ditemukan, maka fungsi akan memeriksa apakah simpul yang dicari lebih kecil atau lebih besar dari root node. Jika lebih kecil, fungsi akan mencari simpul pada anak kiri root node, dan sebaliknya.

Kesimpulan

Dalam artikel ini, kita telah membahas konsep binary tree, cara membuat dan melakukan operasi pada binary tree menggunakan bahasa pemrograman Java, khususnya contoh program binary tree pada java. Binary tree adalah struktur data yang sangat berguna dalam pemrograman karena dapat membantu mengurutkan data dengan cepat dan efisien, serta memudahkan pencarian data dalam jumlah besar.

Dalam contoh program binary tree pada java, kita dapat melihat bagaimana implementasi dari binary search tree dan binary tree search. Dalam binary search tree, simpul ditambahkan pada posisi yang tepat agar binary tree selalu terurut secara ascending. Sedangkan dalam binary tree search, pencarian simpul dilakukan dengan cara memeriksa simpul root dan mencari simpul pada anak kiri atau anak kanan tergantung pada nilai simpul yang dicari.

Dalam mengimplementasikan binary tree pada Java, ada beberapa hal yang perlu diperhatikan, seperti mengatur posisi simpul, menyimpan nilai simpul, dan melakukan operasi pada simpul seperti penambahan, pencarian, dan penghapusan. Namun, dengan contoh program binary tree pada java yang telah dijelaskan di atas, kita dapat memahami konsep binary tree dan mengimplementasikannya dengan mudah pada program Java.

Dalam memahami konsep binary tree, perlu diingat bahwa binary tree adalah struktur data yang sangat fleksibel dan dapat digunakan dalam berbagai macam aplikasi. Namun, seperti halnya dengan struktur data lainnya, implementasi yang tepat dan efisien sangatlah penting untuk memaksimalkan kinerja dan menghindari bug atau kesalahan lainnya.

Dalam mengimplementasikan binary tree pada program Java, perlu diingat untuk selalu memeriksa kode secara seksama dan melakukan uji coba untuk memastikan program berjalan dengan baik. Dengan melakukan hal tersebut, kita dapat memastikan bahwa program yang kita buat bekerja dengan baik dan sesuai dengan kebutuhan kita.