Langsung ke konten utama

Tugas Pertemuan 15

Pengertian Binary Tree

Binary Tree merupakan salah satu bentuk struktur data tidak linear yang menggambarkanhubungan yang bersifat hirarkis (hubungan one to many) antara elemen-elemen. Tree bisa didefinisikan sebagai kumpulan simpul/node dengan satu elemen khusus yang disebut Root dan node lainnya ( disebut subtree).

Dalam tree terdapat jenis-jenis tree yang memiliki sifat khusus, diantaranya adalah binary tree.

Binary tree adalah suatu tree dengan syarat bahawa tiap node (simpul) hanya boleh memiliki maksimal dua subtree dan kedua subtree tersebut harus terpisah. Tiap node dalam binary treee boleh memiliki paling banyak dua child (anak simpul), secara khusus anaknya dinamakan kiri dan kanan.

Binary Tree merupakan himpunan vertex-vertex yang terdiri dari 2 subtree (dengan disjoint) yaitu subtree kiri dan subtree kanan. Setiap vertex dalam binary tree mempunyai derajat keluar max = 2.


Sebuah pohon biner adalah grafik asiklis yang terhubung dimana setiap tingkatan dari susut tidak lebih dari 3. Ini dapat ditunjukkan bahwa dalam pohon biner manapun, terdapat persis dua atau lebih simpul dengan tingkat satu daripada yang terdapat dengan tingkat tiga, tetapi bisa terdapat angka apa saja dari simpul dengan tingkat dua. Sebuah pohon biner berakar merupakan sebuah grafik yang mempunyai satu dari sudutnya dengan tingkat tidak lebih dari dua sebagai akar.

Dengan akar yang dipilih, setiap sudut akan memiliki ayah khusus, dan diatas dua anak bagaimanapun juga, sejauh ini terdapat keterbatasan informasi untuk membedakan antara anak kiri atau kanan. Jika kita membuang keperluan yang tak terkoneksi, membolehkan bermacam koneksi dalam komponen di grafik, kita memanggil struktur sebuah hutan.

Sebuah jalan lain untuk mendefinisikan pohon biner melalui definisi rekursif pada grafik langsung. Sebuah pohon biner dapat berarti :

  • Sebuah sudut tunggal.
  • Sebuah graf yang dibentuk dengan mengambil dua pohon biner, menambahkan sebuah sudut, dan menambahkan sebuah panah langsung dari sudut yang baru ke akar dai setiap pohon biner.

Pohon biner dapat dikontruksi dari bahasa pemrogaraman primitif dalam berbagai cara. Dalam bahasa yang menggunakan records dan referensi. Pohon biner secara khas dikontruksi dengan mengambil sebuah struktur simpul pohon yang memuat beberapa data dan referensi ke anak kiri dan anak kanan.

Kadang-kadang itu juga memuat sebuah referensi ke ayahnya yang khas. Jika sebuah simpul mempunyai kurang dari dua anak, beberapa penunjuk anak diaatur kedalam nilai nol khusus atau kesebuah simpul sentinel.

Pohon biner dapat juga disimpan sebagai struktur data implisit dalam array, dan jika pohon tersebut merupakan sebuah pohon biner lengkap, metode ini tidak boros tempat. Dalam penyusunan yang rapat ini, jika sebuah simpul memiliki indeks i, anaknya dapat ditemukan pada indeks ke-2i+1 dan 2i+2, meskipun ayahnya (jika ada) ditemukan pada indeks lantai ((i-1)/2) (asumsikan akarnya memiliki indeks kosong). Metode ini menguntungkan dari banyak penyimpanan yang rapat dan memiliki referensi lokal yang lebih baik, teristimewa selama sebuah preordeer traversal.


Istilah-istilah dalam pohon

1. Predesesor
Node yang berada diatas node tertentu.
(contoh : B predesesor dari E dan F

2. Succesor
Node yang berada dibawah node tertentu.
(contoh : E dan F merupakan succesor dari B)

3. Ancestor
Seluruh node yang terletak sebelum node tertentu dan
terletak pada jalur yang sama.
(contoh : A dan B merupakan ancestor dari F)
Istilah – istilah Dalam Pohon

4. Descendant
Seluruh node yang terletak sesudah node tertentu
dan terletak pada jalur yang sama.
(contoh : F dan B merupakan ancestor dari A

5. Parent
Predesesor satu level diatas satu node
(contoh : B merupakan parent dari F)

6. Child
Succesor satu level dibawah satu node
(contoh : F merupakan child dari B)

7. Sibling
Node yang memiliki parent yang sama dengan satu
node (contoh : E dan F adalah sibling)

8. Subtree
Bagian dari tree yang berupa suatu node beserta
descendant-nya (contoh : Subtree B, E, F dan
Subtree D, G, H)

9. Size
Banyaknya node dalam suatu tree (contoh : gambar
tree diatas memiliki size = 8)

10. Height
Banyaknya tingkat/level dalam suatu tree (contoh :
gambar tree diatas memiliki height = 3)

11. Root (Akar)
Node khusus dalam tree yang tidak memiliki
predesesor (Contoh : A)

12. Leaf (Daun)
Node-node dalam tree yang tidak memiliki daun
(contoh : Node E,F,C,G,H)

13. Degree (Derajat)
Banyaknya child yang dimiliki oleh suatu node
(contoh : Node A memiliki derajat 3, node B memiliki derajat 2)


Istilah pada pohon Binar

  • Pohon Biner Penuh (Full Binary Tree) Semua simpul (kecuali daun) memiliki 2 anak dan tiap cabang memiliki panjang ruas yang sama.
  • Pohon Biner Lengkap (Complete Binary Tree) Hampir sama dengan Pohon BinerPenuh, semua simpul (kecualidaun) memiliki 2 anak tetapi tiap cabang memiliki panjang ruas berbeda.
  • Pohon Biner Similer Dua pohon yang memiliki struktur yang sama tetapi informasinya berbeda.
  • Pohon Biner Ekivalent Dua pohon yang memiliki struktur dan informasi yangsama.
  • Pohon Biner Miring (Skewed Tree) Dua pohon yang semua simpulnya mempunyai satu anak / turunan kecuali daun.

Sifat utama Pohon Berakar

1. Jika Pohon mempunyai Simpul sebanyak n, maka banyaknya ruas atau edge adalah (n-1).

2. Mempunyai Simpul Khusus yang disebut Root, jika Simpul tersebut memiliki derajat keluar >= 0, dan derajat masuk = 0.

3. Mempunyai Simpul yang disebut sebagai Daun / Leaf, jika Simpul tersebut berderajat keluar = 0, dan berderajat masuk = 1.

4. Setiap Simpul mempunyai Tingkatan / Level yang dimulai dari Root yang Levelnya = 1 sampai dengan Level ke – n pada daun paling bawah. Simpul yang mempunyai Level sama disebut Bersaudara atau Brother atau Stribling.

5. Pohon mempunyai Ketinggian atau Kedalaman atau Height, yang merupakan Level tertinggi

6. Pohon mempunyai Weight atau Berat atau Bobot, yang banyaknya daun (leaf) pada Pohon.

7. Banyaknya Simpul Maksimum sampai Level N adalah : 2 (N) – 1

8. Banyaknya Simpul untuk setiap Level I adalah :

N

∑ 2 ( I – 1)

I = 1


Kunjungan pada pohon Biner

Kunjungan pohon biner terbagi menjadi 3 bentuk binary tree :

1. Kunjungan secara preorder ( Depth First Order), mempunyai urutan :

  • Cetak isi simpul yang dikunjungi ( simpul akar ),
  • Kunjungi cabang kiri,
  • Kunjungi cabang kanan .


2. Kunjungan secara inorder ( symetric order), mempunyai urutan :

  • Kunjungi cabang kiri,
  • Cetak isi simpul yang dikunjungi (simpul akar),
  • Kunjungi cabang kanan .


3. Kunjungan secara postorder, mempunyai urutan :

  • Kunjungi cabang kiri,
  • Kunjungi cabang kanan,
  • Cetak isi simpul yang dikunjungi ( simpul akar ).


Aplikasi pohon Biner

Notasi Prefix, Infix dan Postfix

Pada bagian ini akan dibahas tentang bagaimana menyusun sebuah Pohon Binar yang apabila dikunjungisecara PreOrder akan menghasilkan Notasi Prefix,kunjungan secara InOrder menghasilkan Notasi Infix, dankunjungan PostOrder menghasilkan Notasi Postfix.


CONTOH PROGRAM TREE DALAM C++

#include <iostream>

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

struct Node{

int data;

Node *kiri;

Node *kanan;

};

int count;

void tambah(Node **root, int databaru)

{

if((*root) == NULL){

Node *baru;

baru = new Node;

baru->data = databaru;

baru->kiri = NULL;

baru->kanan = NULL;

(*root) = baru;

(*root)->kiri = NULL;

(*root)->kanan = NULL;

printf("Data telah Dimasukkan");

}

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

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

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

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

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

printf("Data sudah ada!!");

}

void preOrder(Node *root){

if(root != NULL){

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

preOrder(root->kiri);

preOrder(root->kanan);

}

}

void inOrder(Node *root){

if(root != NULL){

inOrder(root->kiri);

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

inOrder(root->kanan);

}

}

void postOrder(Node *root){

if(root != NULL){

postOrder(root->kiri);

postOrder(root->kanan);

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

}

}

void search(Node **root, int cari)

{

if((*root) == NULL){

printf("Maaf,Data tidak ditemukan!");

}

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

search(&(*root)->kiri,cari);

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

search(&(*root)->kanan,cari);

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

printf("Data ditemukan!!!");

}

void hapus(Node **root, int del)

{

if((*root) == NULL){

printf("Data tidak ada!!");

}

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

hapus(&(*root)->kiri,del);

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

hapus(&(*root)->kanan,del);

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

{

(*root)=NULL;

printf("Data telah Terhapus");

}

}

int main(){

int pil,cari,del;

Node *pohon;

pohon = NULL;

do{

int data;

system("cls");

printf("       PROGRAM TREE LANJUTAN    \n");

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

printf("   1. Masukkan Data             \n");

printf("   2. Transverse                \n");

printf("   3. Cari                      \n");

printf("   4. Hapus                     \n");

printf("   5. Clear Data                \n");

printf("   6. Keluar                    \n");

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

printf("Masukkan Pilihan Anda : ");

scanf("%d",&pil);

switch(pil){

case 1:

printf("Masukkan data baru : ");

scanf("%d", &data);

tambah(&pohon,data);

break;

case 2:

printf("\nPreOrder : ");

if(pohon!=NULL) preOrder(pohon);

else printf("Data masih kosong");

printf("\ninOrder : ");

if(pohon!=NULL) inOrder(pohon);

else printf("Data masih kosong");

printf("\npostOrder : ");

if(pohon!=NULL) postOrder(pohon);

else printf("Data masih kosong");

break;

case 3:

printf("Cari data : ");

scanf("%d", &cari);

search(&pohon,cari);

break;

case 4:

printf("Hapus data : ");

scanf("%d", &del);

hapus(&pohon,del);

break;

case 5:

pohon = NULL;

printf("Semua data telah terhapus");

break;

case 6:

return 0;

default:

printf("Maaf, pilihan Anda Salah");

}

getch();

}while(pil!=7);

}


Hasil 




Komentar

Postingan populer dari blog ini

Tugas Pertemuan 6

SOAL 1. Buatlah suatu program Animasi Antrian dengan 4 buah pilihan : INSERT, DELETE, CETAK ANTRIAN, QUIT. Jika dipilih INSERT : program akan meminta user untuk menginput sebuah karakter yang akan dimasukan kedalam antrian Jika dipilih DELETE : maka karakter pertama masuk akan dikeluarkan dari antrian Jika dipilih CETAK ANTRIAN : komputer menampilkan karakter yang ada pada antrian Jika dipilih QUIT : program keluar   Jawaban #include<stdio.h> #include #include #include #define n 10 using namespace std; void INSERT(); void DELETE(); void CETAKLAYAR(); void Inisialisasi(); void RESET(); int PIL,F,R; char PILIHAN [1],HURUF; char Q[n]; void main ( ) { Inisialisasi(); do { cout >PILIHAN; PIL=atoi(PILIHAN); switch (PIL) { case 1: INSERT (); break; case 2: DELETE(); break; case 3: CETAKLAYAR (); break; default: cout >HURUF; Q[++R]=HURUF; } else cout
Digital marketing dalam perspektif seorang pengusaha atau pebisnis lebih kepada sistem pemasaran dengan menggunakan media internet. Sudah pasti, di dalamnya termasuk mobile phone hingga beberapa situs jejaring sosial lainnya. Hanya saja, agar Teknik ini lebih mengena kepada sasaran, sepertinya Teknik promosi lebih dikesampingkan dan mengutamakan komunikasi. Menjalin hubungan secara personal dengan konsumen dengan cara mendengar keluhan atau saran akan membuat pelanggan lebih merasa dihargai. Yang pada akhirnya akan memberikan nilai tambah terhadap perkembangan bisnis terutama brand perusahaan. Terlihat sederhana namun sulit untuk dipastikan terlebih bagi mereka yang kurang memahami akan pengertian digital marketing sebenarnya. (Daengs, Achmad, Andi Farouq, 2016 : 287-293). Menurut Urban (2004:2) Digital Marketing menggunakan internet dan teknologi informasi untuk memperluas dan meningkatkan fungsi marketing tradisional. Definisi ini berkonsentrasi pada seluruh marketing tradisi...

Tugas Pertemuan 14

  Latihan  Pohon dengan jumlah simpul=273 merupakan Full atau atau Complete tree  Berapa kedalamannya?  Nomor berapa simpul terkiri dari level tersebut?  Berapa jumlah maksimum simpul pada level 7  Nomor berapa anak kanan dari simpul ke 180? Ada dilevel berapa anak tersebut  Nomor berapa orang tua dari simpul ke 83? Ada di level berapa orang tua tertsebut?  Jawaban : Complete tree 9 level Nomor 256 64 Simpul tidak ada, karena rumus anak kanan adalah 2n+1, maka 2(180)+1=361. sementara jumlah simpul sebanyak 273. orang tua dari simpul ke 83 adalah 41, berada pada level 6. Kirimkan Ini lewat Email BlogThis! Berbagi ke Twitter Berbagi ke Facebook