Anda di halaman 1dari 19

LAPORAN PRAKTIKUM VII

TREE (POHON)

Disusun untuk Memenuhi Matakuliah Praktikum Algoritma dan Struktur Data


Dibimbing oleh Bapak Aji Prasetya Wibawa

Oleh:

Arina Rosyida 140533605017

Ermayanti Eka Pratiwi 140533605195

S1 PTI14 OFF A

UNIVERSITAS NEGERI MALANG


FAKULTAS TEKNIK
JURUSAN TEKNIK ELEKTRO
PRODI S1 PENDIDIKAN TEKNIK INFORMATIKA
MEI 2015
TREE (POHON)

Tujuan
Mahasiswa mampu menjelaskan mengenai algoritma Tree
Mahasiswa mampu membuat dan mendeklarasikan struktur algoritma Tree
Mahasiswa mampu menerapkan dan mengimplementasikan algoritma Tree

DASAR TEORI
Pengertian tree

Tree adalah suatu struktur data yang berbentuk pohon terbalik (akarnya terletak diatas)
dan terdiri dari serangkaian node (simpul) yang saling berhubungan.

Istilah dalam tree


Beberapa jenis Tree yang memiliki sifat khusus :
1) Binary Tree
Binary Tree adalah tree dengan syarat bahwa tiap node hanya boleh memiliki
maksimal dua subtree dan kedua subtree tersebut harus terpisah. Sesuai dengan
definisi tersebut, maka tiap node dalam binary tree hanya boleh memiliki paling
banyak dua child.

Jenis-jenis Binary Tree :


a) Full Binary Tree
Binary Tree yang tiap nodenya (kecuali leaf) memiliki dua child dan tiap subtree
harus mempunyai panjang path yang sama.
b) Complete Binary Tree
Mirip dengan Full Binary Tree, namun tiap subtree boleh memiliki panjang path
yang berbeda. Node kecuali leaf memiliki 0 atau 2 child.
c) Skewed Binary Tree
Binary Tree yang semua nodenya (kecuali leaf) hanya memiliki satu child.

Operasi dalam tree


1) Preorder (VLR) yaitu terdiri dari cetak node yang dikunjungi,kunjungi
left,kunjungi right.
2) Inorder (LVR) yaitu terdiri dari kunjungi left,cetak node yang
dikunjungi,kunjungi right.
3) Postorder (LRV) yaitu terdiri dari kunjungi left,kunjungi right,cetak node yang
dikunjungi.
Latihan

Algoritma dan Struktur Data

Nama Program : Program Tree


Bahasa Pemrograman : C++
Compiler : MinGW Developer Studio
Script Program :
#include <stdio.h>
#include <conio.h>
typedef struct Node{
int data;
Node *kiri;
Node *kanan;
};
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 bertambah!");
}
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);
}
}
main(){
int pil,c;
Node *pohon,*t;
pohon = NULL;
do{
int data;
printf("MENU\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){
case 1: printf("Data baru : ");
scanf("%d", &data);
tambah(&pohon,data);
break;
case 2: if(pohon!=NULL) preOrder(pohon);
else printf("Masih kosong!");
break;
case 3: if(pohon!=NULL) inOrder(pohon);
else printf("Masih kosong!");
break;
case 4: if(pohon!=NULL) postOrder(pohon);
else printf("Masih kosong!");
break;
}
getch();
}while(pil!=5);
}

Output Program :
Algoritma :
1. Start
2. Deklarasi header file
3. Deklarasi variabel
4. Tampilan Menu
5. Masukkan pilihan
6. Menyimpan pilihan yang sudah diinputkan
7. Menampilkan isi dari pilihan
8. Jika pilih no 1, maka akan menambahkan data
9. Menyimpan data yang telah diinputkan
10. Jika pilih no 2, maka akan menampilkan data yang baru diinputkan
11. Jika pilih no 3, maka akan menampilkan data yang sama, hanya saja urutannya yang
berbeda (dibalik)
12. Jika pilih no 4, maka akan menampilkan data yang sama dan urutannya juga sama
dengan in-order
13. Jika pilih no 5, maka akan keluar dari program
14. Output program
15. End

Penjelasan Program :
Pada latihan ini diterapkan pemrograman dengan menggunakan tree. Di dalam program ini,
menyediakan menu operasi dalam tree yaitu pre-order,in-order, dan post-order juga ada menu
untuk menambahkan data yang akan dioperasikan serta menu untuk keluar (exit). Ketika user
telah menambahkan data-data kemudian memilih operasi tree,program akan berjalan sesuai
dengan sintaks yang ada. Jika user memilih pre-order, maka data-data tersebut akan
dimunculkan sesuai urutan penambahan data. Jika user memilih in-order,maka data-data akan
diurutkan dari yang terkecil ke terbesar. Dan jika user memilih post-order, data-data itu
ditampilkan sama seperti in-order karena terdapat sintaks postOrder(root->kiri);
postOrder(root->kanan); sehingga apabila data tidak mengalami perubahan, maka akan
ditampilkan seperti tampilan in-order.
Tugas 1

Algoritma dan Struktur Data

Nama Program : Program Tree dengan Fungsi untuk Menghapus Sebuah Node
Tertentu dan Mapus Seluruh Node
Bahasa Pemrograman : C++
Compiler : MinGW Developer Studio
Script Program :
#include <stdio.h>
#include <stdlib.h>
#include <conio.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 sudah ditambahkan!");
count++;
}
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("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 sudah dihapus!");
}
}
int main(){
int pil, cari, del;
Node *pohon;
pohon=NULL;
do{
int data;
system("cls");
printf("\n MENU ");
printf("\n========================\n");
printf("1. Menambah data\n");
printf("2. Lihat pre-Order\n");
printf("3. Lihat in-Order\n");
printf("4. Lihat post-Order\n");
printf("5. Cari data\n");
printf("6. Menghapus data\n");
printf("7. Mengkosongkan Tree\n");
printf("8. Keluar\n");
printf("========================\n");
printf("Masukkan pilihan : " );
scanf("%d", &pil);
switch(pil){
case 1:
printf("\nMasukkan data baru : ");
scanf("%d", &data);
tambah(&pohon, data);
break;
case 2:
if(pohon!=NULL){
printf("\n");
preOrder(pohon);
}
else printf("\nTree masih kosong!!");
break;
case 3:
if(pohon!=NULL){
printf("\n");
inOrder(pohon);
}
else printf("\nTree masih kosong!!");
break;
case 4:
if(pohon!=NULL){
printf("\n");
postOrder(pohon);
}
else printf("\nTree masih kosong!!");
break;
case 5:
printf("\nMasukkan data yg dicari : ");
scanf("%d", &cari);
search(&pohon, cari);
break;
case 6:
printf("\nMasukkan data yg dihapus : ");
scanf("%d", &del);
hapus(&pohon, del);
break;
case 7:
pohon=NULL;
printf("\nTree sudah dikosongkan!!");
break;
}
getch();
}
while(pil!=8);
}

Output Program :
Algoritma :
1. Start
2. Deklarasi header file
3. Deklarasi variabel
4. Tampilan Menu
5. Masukkan pilihan
6. Menyimpan pilihan yang sudah diinputkan
7. Menampilkan isi dari pilihan
8. Jika pilih no 1, maka akan menambah data
9. Menyimpan data yang telah diinputkan
10. Jika pilih no 2, maka akan menampilkan data yang baru diinputkan
11. Jika pilih no 3, maka akan menampilkan data yang sama dengan pre-order
12. Jika pilih no 4, maka akan menampilkan data yang sama, hanya saja urutannya yang
berbeda (dibalik)
13. Jika pilih no 5, maka akan mencari data yang kita inputkan
14. Jika pilih no 6, maka akan menghapus data tertentu yang ingin kita hapus
15. Menyimpan data
16. Jika pilih no 7, maka akan menghapus semua data yang ada dan tree akan
dikosongkan
17. Jika pilih no 8, maka akan keluar dari program
18. Output program
19. End

Penjelasan Program :

Tugas 1 adalah program tree yang menyediakan menu untuk menghapus node dan
mengkosongkan tree. Perintah sintaks untuk menghapus node yaitu terdapat di dalam void
hapus dan script hapus(&pohon, del); . Perintah sintaks untuk mengkosongkan tree yaitu
pohon=NULL; .
Tugas 2

Algoritma dan Struktur Data

Nama Program : Program Tree dengan Fungsi untuk Searching Node


Bahasa Pemrograman : C++
Compiler : MinGW Developer Studio
Script Program :
#include<stdio.h>
#include<malloc.h>
struct BT
{
int data;
struct BT *right, *left;
};
void insert(struct BT ** ptr, int d)
{
if ((*ptr) == NULL)
{
(*ptr) = ( struct BT* ) malloc( sizeof( struct BT ) );
(*ptr ) ->data = d;
( *ptr ) ->left = ( *ptr ) ->right = NULL;
}
else
{
if ( ( *ptr ) ->data > d )
insert(&( ( *ptr ) ->left ), d );
else
insert(&( ( *ptr ) ->right ), d );
}
return ;
}
int search( struct BT *ptr, int no )
{
if ( ptr == NULL )
return ( 0 );
if ( ptr->data == no )
return ( 1 );
if ( ptr->data > no )
return ( search( ptr->left, no ) );
else
return ( search( ptr->right, no ) );
}
void inorder( struct BT *ptr )
{
if ( ptr == NULL )
return ;
else
{
inorder( ptr->left );
printf( "\t%d", ptr->data );
inorder( ptr->right );
}
}
void preorder( struct BT*ptr )
{
if ( ptr == NULL )
return ;
else
{
printf( "\t%d", ptr->data );
preorder( ptr->left );
preorder( ptr->right );
}
}
void postorder( struct BT*ptr )
{
if ( ptr == NULL )
return ;
else
{
postorder( ptr->left );
postorder( ptr->right );
printf( "\t%d", ptr->data );
}
}
int main()
{
struct BT * root;
int ch, d, no, f;
root = NULL;
while ( ch != 6 )
{
printf( "\n 1.Masuk\n 2.Cari\n 3.Inorder\n 4.Preorder\n 5.Postorder\n
6.Exit\n" );
printf( "\n Masukkan Pilihan:" );
scanf( "%d", &ch );
switch ( ch )
{
case 1:
printf( "Masukkan data:" );
scanf( "%d", &d );
insert(&root, d );
break;
case 2:
printf( "Masukkan node:" );
scanf( "%d", &no );
f = search( root, no );
if ( f == 0 )
printf( "Node Tidak Ada" );
else
printf( "Node Ada" );
break;
case 3:
inorder( root );
break;
case 4:
preorder( root );
break;
case 5:
postorder( root );
break;
case 6:
break;
}
}
}
Output Program :
Algoritma :
1. Start
2. Deklarasi header file
3. Deklarasi variabel
4. Tampilan Menu
5. Masukkan pilihan
6. Menyimpan pilihan yang sudah diinputkan
7. Menampilkan isi dari pilihan
8. Jika pilih no 1, maka akan menambahkan data
9. Menyimpan data yang telah diinputkan
10. Jika pilih no 2, maka akan mencari data sesuai dengan inputan
11. Jika pilih no 3, maka akan menampilkan data yang baru diinputkan
12. Jika pilih no 4, maka akan menampilkan data yang sama dengan in-order
13. Jika pilih no 5, maka akan menampilkan data yang sama, hanya saja urutannya yang
berbeda (dibalik)
14. Jika pilih no 6, maka akan keluar dari program
15. Output program
16. End

Penjelasan Program :

Tugas 2 adalah program tree yang memiliki fungsi untuk searching node. Untuk perintah
searching node dapat menggunakan sintaks f = search( root, no );
if ( f == 0 )
printf( "Node Tidak Ada" );
else
printf( "Node Ada" );
Dari sintaks diatas, jika pencarian bernilai 0 atau tidak ditemukan, maka akan menampilkan
Node Tidak Ada dan selain itu,dengan kata lain node yang dicari tidak 0 (ditemukan) akan
menampilkan Node Ada .
KESIMPULAN

Tree adalah suatu struktur data yang berbentuk pohon terbalik (akarnya terletak diatas)
dan terdiri dari serangkaian node (simpul) yang saling berhubungan.
Binary Tree adalah tree dengan syarat bahwa tiap node hanya boleh memiliki maksimal
dua subtree dan kedua subtree tersebut harus terpisah.
Jenis-jenis Binary Tree ada 3, yaitu Full Binary Tree, Complete Binary Tree, dan Skewed
Binary Tree.
Operasi dalam tree ada 3, yaitu Preorder, Inorder, dan Postorder.

DAFTAR RUJUKAN

1. Tim Asisten Dosen. 2010. Modul IX Tree (Pohon). Malang: Unversitas Negeri Malang.
2. Array dalam Program (Online)
(http://arraydalamprogram.blogspot.com/2010/03/tree.html, diakses pada tanggal 25 April
2015 pukul 19:30).
3. Rangkuman Struktur Data (Online)
(http://hastalavistayahoocom.blogspot.com/2012/07/rangkuman-struktur-data.html,
diakses pada tanggal 29 April 2015 pukul 15:12).

Anda mungkin juga menyukai

  • Orto 3 Kamis RB
    Orto 3 Kamis RB
    Dokumen1 halaman
    Orto 3 Kamis RB
    ArinaRosyida
    Belum ada peringkat
  • Orto 3 Kamis Ra.
    Orto 3 Kamis Ra.
    Dokumen1 halaman
    Orto 3 Kamis Ra.
    ArinaRosyida
    Belum ada peringkat
  • Analisis Kasus Orto3
    Analisis Kasus Orto3
    Dokumen9 halaman
    Analisis Kasus Orto3
    ArinaRosyida
    Belum ada peringkat
  • Bismillah
    Bismillah
    Dokumen1 halaman
    Bismillah
    ArinaRosyida
    Belum ada peringkat
  • Orto 3 Kamis Ra
    Orto 3 Kamis Ra
    Dokumen1 halaman
    Orto 3 Kamis Ra
    ArinaRosyida
    Belum ada peringkat
  • Orto 3 Kamis Rb.
    Orto 3 Kamis Rb.
    Dokumen1 halaman
    Orto 3 Kamis Rb.
    ArinaRosyida
    Belum ada peringkat
  • Raziqa 19-21, Arina 19-47
    Raziqa 19-21, Arina 19-47
    Dokumen4 halaman
    Raziqa 19-21, Arina 19-47
    ArinaRosyida
    Belum ada peringkat
  • Arinar Bismillah
    Arinar Bismillah
    Dokumen1 halaman
    Arinar Bismillah
    ArinaRosyida
    Belum ada peringkat
  • BELAJAR HURUF
    BELAJAR HURUF
    Dokumen10 halaman
    BELAJAR HURUF
    ArinaRosyida
    Belum ada peringkat
  • Baca Dulu
    Baca Dulu
    Dokumen1 halaman
    Baca Dulu
    ArinaRosyida
    Belum ada peringkat
  • Laporan Stack
    Laporan Stack
    Dokumen13 halaman
    Laporan Stack
    ArinaRosyida
    Belum ada peringkat
  • DMF 5
    DMF 5
    Dokumen35 halaman
    DMF 5
    ArinaRosyida
    Belum ada peringkat
  • Laporan Stack
    Laporan Stack
    Dokumen13 halaman
    Laporan Stack
    ArinaRosyida
    Belum ada peringkat
  • Fraktur Mandibula
    Fraktur Mandibula
    Dokumen6 halaman
    Fraktur Mandibula
    ArinaRosyida
    Belum ada peringkat
  • Biodok
    Biodok
    Dokumen2 halaman
    Biodok
    ArinaRosyida
    Belum ada peringkat
  • VIEW MODULE
    VIEW MODULE
    Dokumen16 halaman
    VIEW MODULE
    ArinaRosyida
    0% (3)
  • Pendhlntut 2
    Pendhlntut 2
    Dokumen3 halaman
    Pendhlntut 2
    ArinaRosyida
    Belum ada peringkat
  • LP Fis TMJ
    LP Fis TMJ
    Dokumen9 halaman
    LP Fis TMJ
    ArinaRosyida
    Belum ada peringkat
  • Lo Kompail
    Lo Kompail
    Dokumen17 halaman
    Lo Kompail
    ArinaRosyida
    Belum ada peringkat
  • Lo
    Lo
    Dokumen2 halaman
    Lo
    ArinaRosyida
    Belum ada peringkat
  • Tutorial Tugas
    Tutorial Tugas
    Dokumen4 halaman
    Tutorial Tugas
    ArinaRosyida
    Belum ada peringkat
  • Lo
    Lo
    Dokumen2 halaman
    Lo
    ArinaRosyida
    Belum ada peringkat
  • Tutfix
    Tutfix
    Dokumen7 halaman
    Tutfix
    ArinaRosyida
    Belum ada peringkat
  • Fraktur Mandibula
    Fraktur Mandibula
    Dokumen6 halaman
    Fraktur Mandibula
    ArinaRosyida
    Belum ada peringkat
  • Oropharingeal Candidiasis (OPC) Dan Kolonisasi Yeast
    Oropharingeal Candidiasis (OPC) Dan Kolonisasi Yeast
    Dokumen13 halaman
    Oropharingeal Candidiasis (OPC) Dan Kolonisasi Yeast
    ArinaRosyida
    Belum ada peringkat