Kamis, 12 Desember 2013

Halaman Tugas Mega Segmen Tiga

Algoritma Transversal (Pre-Order, In-Order, Post-Order)


Preorder Traversal :

Untuk melintasi sebuah pohon biner di Pre-order , setelah operasi dilakukan -out ( i ) Kunjungi akar , ( ii ) Traversal bagian kiri pohon, dan ( iii ) Traversal bagian kanan pohon.
Oleh karena itu, traversal Pre-Order dari pohon di atas akan output :
7 , 1 , 0 , 3 , 2 , 5 , 4 , 6 , 9 , 8 , 10

Inorder traversal : Untuk melintasi sebuah pohon biner di In-order , setelah operasi dilakukan -out ( i ) Traversal bagian pohon paling kiri dimulai dari node eksternal kiri , ( ii ) Kunjungi akar , dan ( iii ) Traversal bagian kanan pohon mulai dari meninggalkan simpul eksternal .
Oleh karena itu, inorder traversal dari pohon di atas akan output :
0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10

Postorder traversal : Untuk melintasi sebuah pohon biner di post-order , setelah operasi dilakukan -out ( i ) Traverse semua node eksternal kiri dimulai dengan yang bagian pohon paling kiri yang kemudian diikuti dengan gelembung - up semua node internal , ( ii ) Traversal yang subtree kanan dimulai dari node eksternal kiri yang kemudian diikuti dengan gelembung - up semua node internal , dan ( iii ) Kunjungi akar .
Oleh karena itu, post-order traversal dari pohon di atas akan output :
0 , 2 , 4 , 6 , 5 , 3 , 1 , 8 , 10 , 9 , 7

Halaman Tugas Mega Segmen Dua

Implementasi Pohon Biner Dalam C++


Salah satu jenis struktur data yang cukup populer adalah Binary Tree atau Pohon Biner. Menurut saya Binary Tree mempunyai kemampuan / efisiensi yang sama baik dengan binary search dalam hal searching. Tapi lebih baik dalam hal insert, delete dan traversal daripada binary search. Karena alokasi memory dari Binary Tree dinamis sedangkan alokasi binary search statis karena menggunakan array. Agar suatu struktur data tree dapat disebut dengan Binary Tree harus dipenuhi syarat sebagai berikut :

  1. Setiap node / impul maksimal mempunyai dua sub-node
  2. Nilai pada node sebelah kiri lebih kecil dari pada node disebelah kanan
Berikut ini code untuk Binary Tree dalam bahasa C++ dengan tool yang digunakan CodeBlock 8.02

#include <iostream>
#include <cstdlib>
using namespace std;

class BinarySearchTree
{
private:
struct nodeTree
{
nodeTree* left;
nodeTree* right;
int data;
};
nodeTree* root;

public:
BinarySearchTree()
{
root = NULL;
}

bool isEmpty() const { return root==NULL; }
void print_inorder();
void inorder(nodeTree*);
void print_preorder();
void preorder(nodeTree*);
void print_postorder();
void postorder(nodeTree*);
void insert(int);
void remove(int);
};

void BinarySearchTree::insert(int d)
{
nodeTree* t = new nodeTree;
nodeTree* parent;
t->data = d;
t->left = NULL;
t->right = NULL;
parent = NULL;

if(isEmpty()) root = t;
else
{

nodeTree* current;
current = root;

while(current)
{
parent = current;
if(t->data > current->data) current = current->right;
else current = current->left;
}

if(t->data < parent->data)
parent->left = t;
else
parent->right = t;
}
}

void BinarySearchTree::remove(int d)
{
//Locate the element
bool found = false;
if(isEmpty())
{
cout<<" This Tree is empty! "<<endl;
return;
}

nodeTree* current;
nodeTree* parent;
current = root;

while(current != NULL)
{
if(current->data == d)
{
found = true;
break;
}
else
{
parent = current;
if(d>current->data) current = current->right;
else current = current->left;
}
}
if(!found)
{
cout<<" Data not found! "<<endl;
return;
}

// Node dengan single child
if((current->left == NULL && current->right != NULL)|| (current->left != NULL
&& current->right == NULL))
{
if(current->left == NULL && current->right != NULL)
{
if(parent->left == current)
{
parent->left = current->right;
delete current;
}
else
{
parent->right = current->right;
delete current;
}
}
else
{
if(parent->left == current)
{
parent->left = current->left;
delete current;
}
else
{
parent->right = current->left;
delete current;
}
}
return;
}

// node tidak mempunyai child node
if( current->left == NULL && current->right == NULL)
{
if(parent->left == current ) parent->left = NULL;
else parent->right = NULL;
delete current;
return;
}

//Node dengan 2 child node
// ganti node dengan nilai terkecil di subtree bagain kanan
if (current->left != NULL && current->right != NULL)
{
nodeTree* temp;
temp = current->right;
if((temp->left == NULL) && (temp->right == NULL))
{
current = temp;
delete temp;
current->right = NULL;
}
else
{

if((current->right)->left != NULL)
{
nodeTree* lcurrent;
nodeTree* lcurrp;
lcurrp = current->right;
lcurrent = (current->right)->left;
while(lcurrent->left != NULL)
{
lcurrp = lcurrent;
lcurrent = lcurrent->left;
}
current->data = lcurrent->data;
delete lcurrent;
lcurrp->left = NULL;
}
else
{
nodeTree* tmp2;
tmp2 = current->right;
current->data = tmp2->data;
current->right = tmp2->right;
delete tmp2;
}

}
return;
}

}

void BinarySearchTree::print_inorder()
{
inorder(root);
}

void BinarySearchTree::inorder(nodeTree* p)
{
if(p != NULL)
{
if(p->left) inorder(p->left);
cout<<" "<<p->data<<" ";
if(p->right) inorder(p->right);
}
else return;
}

void BinarySearchTree::print_preorder()
{
preorder(root);
}

void BinarySearchTree::preorder(nodeTree* p)
{
if(p != NULL)
{
cout<<" "<<p->data<<" ";
if(p->left) preorder(p->left);
if(p->right) preorder(p->right);
}
else return;
}

void BinarySearchTree::print_postorder()
{
postorder(root);
}

void BinarySearchTree::postorder(nodeTree* p)
{
if(p != NULL)
{
if(p->left) postorder(p->left);
if(p->right) postorder(p->right);
cout<<" "<<p->data<<" ";
}
else return;
}

int main()
{
BinarySearchTree b;
int ch,tmp,tmp1;
while(1)
{
cout<<endl<<endl;
cout<<" Binary Search Tree Operations "<<endl;
cout<<" ----------------------------- "<<endl;
cout<<" 1. Insertion/Creation "<<endl;
cout<<" 2. In-Order Traversal "<<endl;
cout<<" 3. Pre-Order Traversal "<<endl;
cout<<" 4. Post-Order Traversal "<<endl;
cout<<" 5. Removal "<<endl;
cout<<" 6. Exit "<<endl;
cout<<" Enter your choice : ";
cin>>ch;
switch(ch)
{
case 1 : cout<<" Enter Number to be inserted : ";
cin>>tmp;
b.insert(tmp);
break;
case 2 : cout<<endl;
cout<<" In-Order Traversal "<<endl;
cout<<" -------------------"<<endl;
b.print_inorder();
break;
case 3 : cout<<endl;
cout<<" Pre-Order Traversal "<<endl;
cout<<" -------------------"<<endl;
b.print_preorder();
break;
case 4 : cout<<endl;
cout<<" Post-Order Traversal "<<endl;
cout<<" --------------------"<<endl;
b.print_postorder();
break;
case 5 : cout<<" Enter data to be deleted : ";
cin>>tmp1;
b.remove(tmp1);
break;
case 6 :
return 0;

}
}
}

Halaman Tugas Mega Segmen Satu

Definisi Struktur Data (Tree)


Kumpulan node yang saling terhubung satu sama lain dalam suatu kesatuan yang membentuk layaknya struktur sebuah pohon.

Struktur pohon adalah suatu cara mempresentasikan suatu struktur hirarki (one-to-many) secara grafis yang mirip sebuah pohon, meskipun pohon tersebut hanya tampak sebagai kumpulan node-node dari atas ke bawah.


Suatu struktur data yang tidak linier yang menggambarkan hubungan yang hirarkis (one-to-many) dan tidak linier antara elemen-elemennya.

- Contoh penggunaan struktur pohon :



  • Silsilah keluarga
  • Parse Tree (pada compiler)
  • Struktur File
  • Pertandingan



Struktur Pohon



- Operasi-operasi Pada Tree


—  Insert: menambah node ke dalam Tree secara rekursif.  Jika data yang akan dimasukkan lebih besar daripada elemen root, maka akan diletakkan di node sebelah kanan, sebaliknya jika lebih kecil maka akan diletakkan di node sebelah kiri.  Untuk data pertama akan menjadi elemen root.


Find: mencari node di dalam Tree secara rekursif sampai node tersebut ditemukan dengan menggunakan variable bantuan ketemu.  Syaratnya adalah tree tidak boleh kosong.


Traverse: yaitu operasi kunjungan terhadap node-node dalam pohon dimana masing-masing node akan dikunjungi sekali.
Count: menghitung jumlah node dalam Tree.
Height : mengetahui kedalaman sebuah Tree.Find Min dan Find Max : mencari nilai terkecil dan terbesar pada Tree.Child : mengetahui anak dari sebuah node (jika punya).Daun/leaf : Simpul yang derajat = 0 disebut daun / leaf
Hubungan antar simpul : bapak, ,anak, paman, dllTingkat (level)Derajat (degree)Tinggi (height)/kedalaman (depth) : height = tingkat maksimum – 1Ancestor : semua simpul yang terdapat pada lintasan/jalur dari akar sampai simpul tersebutForest (Hutan) : kumpulan sejumlah pohon yang tidak saling berhubungan.


- Jenis Tree



Berdasarkan banyaknya anak :
binary tree / pedigree chart : Complete Binary Tree tingkat N,Skewed BinaryTreeNon Binary Tree (N-ary) & lineal chart

Dari pentingnya urutan Isi :
Ordered treenon ordered tree

- Jenis Traverse



—  PreOrder: cetak node yang dikunjungi, kunjungi left, kunjungi right InOrder: kunjungi left, cetak node yang dikunjungi, kunjungi right—  PostOrder: kunjungi left, kunjungi right, cetak node yang dikunjungi.

- Cara Penulisan Tree :



1. Diagram venn2. Notasi Kurung

- Representasi Lojik

Type Infotype : …………{terdefinisi}
Type address : ………{terdefinisi, sesuai dengan representasi fisik}
Type Node : < Info : Infotype,
Left : address,
Right : address >
Type BinTree : address
Jika P adalah binary tree, maka
Left (P) : mendapatkan alamat cabang kiri dari P
right (P) : mendapatkan alamat cabang kanan dari P
info (P) : mendapatkan bagian info dari node yang ditunjuk P

PRIMITIF-PRIMITIF



  • Make Tree

  • Menyisipkan simpul baru pada binary search Tree


  • Pengecekan Predikat penting

  • Algoritma Traversal Tree









selamat membaca dan selamat jatuh cinta...

menulis bukan sekedar mengisi waktu luang, menulis bukan sekedar iseng iseng menyatukan 26 abjad menjadi satu kumpulan kata yang dirangkai jadi satu kalimat, menulis adalah ungkapan hati pikiran dan perasaan yang semua orang punya karakter dan ciri dari tulisan yang di tulis...

tulisan itu resolusi
menulis itu beresolusi

mari membaca resolusi mega... dari alay ke sedikit lebih tidak alay... (hahahaha)
anak bahasa yang terjebak didunia teknologi yang hanya akan mengenal dua bahasa...