Praktikum Struktur Data MODUL VIII POHON BINER

advertisement
Praktikum Struktur Data
MODUL VIII
POHON BINER
1. Maksud
Tipe pointer untuk membuat Pohon
2. Tujuan
Membuat program untuk implementasi pohon.
3. Teori
3.1. Pengertian pohon.
Tree adalah kontainer non linier yang memodelkan suatu hubungan hirarkis di
mana terdapat satu predesesor unik (parent) tetapi dapat memiliki banyak suksesor
(children). Node yang tidak mempunyai suksesor disebut sebagai root dari tree.
Elemen dari tree disebut node. Setiap node memiliki path yang unik yang
menghubungkannya ke root dari tree. Path adalah rangkaian dari elemen yang
berdampingan. Panjang path adalah jumlah koneksi yang berdampingan dan setidaknya
satu lebih sedikit dari jumlah node yang dihubungkan.
Pohon biner (binary tree) bisa kosong, atau terdiri dari satu node bernama root
(akar) dengan dua pohon biner yang disebut subpohon kanan dan sub pohon kiri. Pohon
pencarian biner (binary search tree) adalah pohon biner yang kosong ataupun yang dalam
setiap node berisi kunci yang memenuhi syarat tertentu. Syarat pertama, semua kunci
subtree kiri dari akar (jika ada) mendahului kunci pada akar. Kedua, kunci pada akar
mendahului semua kunci (jika ada) pada subtree kanan. Ketiga, subtree kiri dan kanan
dari akar juga merupakan pohon pencarian.
3.2. Deklarasi pohon
typedef int Key_type;
typedef struct item_tag
{
int key;
int no;
char *posisi;
}Item_type;
typedef struct node_tag
{
Item_type info;
struct node_tag *kanan;
struct node_tag *kiri;
} Node_type;
31
3.3. Membuat pohon
void CreateTree(Node_type *root)
{
root = NULL;
}
3.4. Mengecek apakah pohon kosong
bool TreeEmpty(Node_type *root)
{
return root==NULL;
}
3.5. Membuat node baru
Node_type *MakeNode(Item_type info)
{
Node_type *p=NULL;
if ((p=(Node_type*)malloc(sizeof(Node_type)))==NULL)
cout<<"Tidak ada tempat";
p->info.key=info.key;
p->kiri=p->kanan=NULL;
return p;
}
3.6. Menambah node ke pohon
Node_type
*InsertTree(Node_type
*root,
Node_type
*newnode)
{
Node_type *p=root;
while (p!=NULL)
{
if (newnode->info.key < p->info.key)
if (p->kiri) p=p->kiri;
else
{p->kiri = newnode;
p->kiri->info.posisi=(char*)" kiri";
p->kiri->info.no=++nourut;break;
}
else if (newnode->info.key > p->info.key)
if (p->kanan) p=p->kanan;
else
{p->kanan=newnode;
p->kanan->info.posisi=(char*)" kanan";
p->kanan->info.no=++nourut;break;
}
else
32
{ cout<<"Kunci duplikat"<<endl;
p=NULL;
}
}
newnode->kiri=newnode->kanan=NULL;
if (root==NULL)
{
root=newnode;
root->info.posisi=(char*)(" root");
root->info.no=++nourut;
}
return root;
}
3.7. Membaca sebuah node
void Visit(Node_type *p)
{ cout<<"("<<p->info.no<<":"<<p->info.key<<")";}
3.8. Mengunjungi pohon secara In Order
void Inorder(Node_type *root, char *s)
{
if (root)
{
Inorder(root->kiri," Kiri");
cout<<s<<" ";Visit(root);
Inorder(root->kanan," Kanan");
}else cout<<"("<<s<<" NULL)"<<endl;
}
3.8. Mengunjungi pohon secara Pre Order
void Preorder(Node_type *root, char *s)
{
if (root)
{
cout<<s<<" ";Visit(root);
Preorder(root->kiri, " Kiri");
Preorder(root->kanan, " Kanan");
}else cout<<"("<<s<<" NULL)"<<endl;
}
33
3.8. Mengunjungi pohon secara Post Order
void Postorder(Node_type *root, char *s)
{
if (root)
{
Postorder(root->kiri," Kiri");
Postorder(root->kanan," Kanan");
cout<<s<<" ";Visit(root);
} else cout<<"("<<s<<" NULL)"<<endl;
}
3.8. Mencari node tertentu dalam pohon
Node_type *TreeSearch(Node_type *p, Key_type target)
{
if (p)
if (target < p->info.key)
p = TreeSearch(p->kiri,target);
else if (target > p->info.key)
p = TreeSearch(p->kanan, target);
return p;
}
4. Praktek.
Buatlah program lengkap untuk mengimplementasikan pohon biner
5. Tugas
Tambahkan menu untuk menghapus node tertentu dalam pohon
34
DAFTAR PUSTAKA
Indra, Erliansyah, Algoritma & Struktur Data dengan C++, Graha Ilmu, Yogyakarta,
2005.
Kruse, Leung and Tondo, Data Structures and Program Design in C, Second Edition,
Prentice Hall, 1997
35
Download