Daftar Blog Saya

Sabtu, 03 Oktober 2020

TUGAS KULIAH STRUKTUR DATA PERTEMUAN KE-15 " POHON BINER (BINARY TREE) "

Bismillah, 

Assalamualaikum Wr.Wb.


Hello My Name Is Alif Yoga Prasetya 😉

Disini Saya Akan Membagikan Tugas Perkuliahan Dengan Mata Kuliah " Struktur Data "



  • POHON BINER

 Dalam ilmu komputer, sebuah pohon biner (binary tree) adalah sebuah pohon struktur data di mana setiap simpul memiliki paling banyak dua anak.

    Dalam ilmu komputer, sebuah pohon biner adalah struktur data pohon di mana setiap node memiliki paling banyak dua anak, yang disebut sebagai anak kiri dan anak kanan. Definisi rekursif hanya menggunakan teori himpunan gagasan adalah bahwa (non-kosong) pohon biner adalah tiga (L, S, R), di mana L dan R adalah pohon biner atau himpunan kosong dan S adalah satu set tunggal. Beberapa penulis memungkinkan pohon biner menjadi himpunan kosong juga.


    Dalam komputasi, pohon biner jarang digunakan semata-mata untuk struktur mereka. Jauh lebih khas adalah untuk mendefinisikan fungsi pelabelan pada node, yang menghubungkan beberapa nilai untuk setiap node. Pohon biner berlabel cara ini digunakan untuk mengimplementasikan pohon pencarian biner dan tumpukan biner, dan digunakan untuk pencarian yang efisien dan penyortiran. Penunjukan node non-root sebagai kiri atau kanan anak bahkan ketika hanya ada satu anak hal hadir dalam beberapa aplikasi, khususnya adalah penting dalam pohon pencarian biner. Dalam matematika, apa yang disebut pohon biner dapat bervariasi secara signifikan dari penulis ke penulis.




Istilah

a. Pohon :susunan dari satu atau lebih simpul (node) yang terdiri dari satu simpul khusus yang disebut 
    akar (root) sedang sisanya membentuk subtree dari akar.

b. Simpul/Vertex/Node : A, B,…, N

c. Busur/Edge/Arc : garis yang menghubungkan antar simpul

d. Superordinat/Father/Parent dan Subordinat/Son/Children.

e. Simpul A merupakan superordinat bagi simpul B, C, D

f. Simpul B, C,D merupakan subordinat bagi simpul A

g. Root/Akar : simpul yang tidak mempunyai superordinat. Pada gambar diatas : A.

h. Leaf/Daun : simpul yang tidak mempunyai subordinat. Pada gambar diatas : C, E, G, I, J, K, L, M, 
    N.  

i. Level/Tingkat : Simpul A berada pada level 0, simpul B, C, D berada pada level 1, dst.

j. Depth/kedalaman : Level tertinggi dari suatu pohon. Pada gambar 1, depth = 3.

k. Derajat/Degree sebuah simpul jumlah simpul subordinat dari simpul tersebut.

l. Derajat/degree sebuah pohon adalah derajat tertinggi dari derajat simpul yang ada pada pohon 
   tersebut.

Aturan Penyajian Binary Tree
  • Tree dapat dibuat dengan menggunakan linked list secara rekursif.
  • Linked list yang digunakan adalah double linked list non circular
  • Data yang pertama kali masuk akan menjadi node root.
  • Data yang lebih kecil dari data node root akan masuk dan menempati node kiri dari node root, sedangkan jika lebih besar dari data node root, akan masuk dan menempati node di sebelah kanan node root.


Karakteristik Binary Tree
  • Setiap Simpul paling banyak hanya memiliki dua buah anak
  • Derajat Tertinggi dari setiap Simpul adalah dua.
  • Dibedakan antara Cabang Kiri dan Cabang Kanan.
  • Dimungkinkan tidak mempunyai Simpul.

Istilah pada Binary Tree :


 1. Pohon Biner Penuh (Full Binary Tree)

 


 

Semua simpul (kecuali daun) memiliki 2 anak dan tiap cabang memiliki panjang ruas yang sama




2. Pohon Biner Lengkap (Complete Binary Tree)






Hampir sama dengan Pohon Biner Penuh, semua simpul (kecuali daun) memiliki 2 anak tetapi tiap cabang memiliki panjang ruas berbeda.





3. Pohon Biner Similer





 

Dua pohon yang memiliki struktur yang sama tetapi informasinya berbeda




4. Pohon Biner Ekivalent



 


Dua pohon yang memiliki struktur dan informasi yang sama





5. Pohon Biner Miring (Skewed Tree)





Dua pohon yang semua simpulnya mempunyai satu anak / turunan kecuali daun.



CONTOH PROGRAM :

 //header file

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

//pendeklarasian struct sebuah tree awal


struct Node

{

int data;


Node *kiri;


Node *kanan;

};

//fungsi untuk menambahkan node baru

void tambah(Node **root, int databaru)

{

//jika root masih kosong

if ((*root) == NULL)

{

//pembuatan node baru

Node *baru;

//pengalokasian memori dari node yang telah dibuat

baru = new Node;

//inisialisasi awal node yang baru dibuat

baru->data = databaru;

baru->kiri = NULL;

baru->kanan = NULL;

(*root) = baru;

(*root)->kiri = NULL;

(*root)->kanan = NULL;

printf("Data bertambah!");

}

//jika data yang akan dimasukkan lebih kecil daripada elemen root, maka akan diletakkan di node sebelah kiri.

else if (databaru < (*root)->data)

tambah(&(*root)->kiri, databaru);

//jika data yang akan dimasukkan lebih besar daripada elemen root, maka akan diletakkan di node sebelah kanan

else if (databaru > (*root)->data)

tambah(&(*root)->kanan, databaru);

//jika saat dicek data yang akan dimasukkan memiliki nilai yang sama dengan data pada root

else if (databaru == (*root)->data)

printf("Data sudah ada!");

}

//fungsi yang digunakan untuk mencetak tree secara preOrder

void preOrder(Node *root)

{

if (root != NULL)

{

printf("%d ", root->data);

preOrder(root->kiri);

preOrder(root->kanan);

}

}

//fungsi yang digunakan untuk mencetak tree secara inOrder

void inOrder(Node *root)

{

if (root != NULL)

{

inOrder(root->kiri);

printf("%d ", root->data);

inOrder(root->kanan);

}

}

//fungsi yang digunakan untuk mencetak tree secara postOrder

void postOrder(Node *root)

{

if (root != NULL)

{

postOrder(root->kiri);

postOrder(root->kanan);

printf("%d ", root->data);

}

}

//fungsi utama

int main()

{

//deklarasikan variabel

int pil, data; // c;

Node *pohon; //*t;

pohon = NULL; //inisialisasi node pohon

//perulangan do-while

do

{

system("cls"); //bersihkan layar

printf("\t#PROGRAM TREE C++#");

printf("\n\t==================");

printf("\nMENU");

printf("\n----\n");

printf("1. Tambah\n");

printf("2. Lihat pre-order\n");

printf("3. Lihat in-order\n");

printf("4. Lihat post-order\n");

printf("5. Exit\n");

printf("Pilihan : ");

scanf("%d", &pil);

switch (pil)

{

//jika pil bernilai 1

case 1:

printf("\nINPUT : ");

printf("\n-------");

printf("\nData baru : ");

scanf("%d", &data);

//panggil fungsi untuk menambah node yang berisi data pada tree

tambah(&pohon, data);

break;


//jika pil bernilai 2

case 2:

printf("\nOUTPUT PRE ORDER : ");

printf("\n------------------\n");

if (pohon != NULL)

//panggil fungsi untuk mencetak data secara preOrder

preOrder(pohon);

else

printf("Masih kosong!");

break;


//jika pil bernilai 3

case 3:

printf("\nOUTPUT IN ORDER : ");

printf("\n------------------\n");

if (pohon != NULL)

//panggil fungsi untuk mencetak data secara inOrder

inOrder(pohon);

else

printf("Masih kosong!");

break;


//jika pil bernilai 4

case 4:

printf("\nOUTPUT POST ORDER : ");

printf("\n------------------\n");

if (pohon != NULL)

//panggil fungsi untuk mencetak data secara postOrder

postOrder(pohon);

else

printf("Masih kosong!");

break;

}

_getch();

} while (pil != 5); //akan diulang jika input tidak samadengan 5

return EXIT_FAILURE;

}


TAMPILAN OUTPUT




Wa'alaikumussalam Warahmatullahi Wabarakatuh 😎

Tidak ada komentar:

Posting Komentar

Catatan: Hanya anggota dari blog ini yang dapat mengirim komentar.

TUGAS STRUKTUR DATA PERTEMUAN KE-4 " STACK (TUMPUKKAN) "

Bismillah,  Assalamualaikum Wr.Wb. Hello My Name Is Alif Yoga Prasetya 😉 Disini Saya Akan Membagikan Tugas Perkuliahan Dengan Mata Kuliah &...