BAB I PENDAHULUAN 1.1 Dasar Teori Tree merupakan salah satu bentuk struktur data tidak linier yang menggambarkan hubungan yang bersifat hirarkis (hubungan one to many) antara elemen-elemen. Tree juga dapat didefinisikan sebagai kumpulan simpul / node dengan satu elemen khusus yang disebut root dan node lainnya terbagi menjadi himpunan-himpunan yang tak saling berhubungan satu sama lainnya (disebut subtree). Berikut adalah istilah-istilah umum dalam tree : Parent : predecessor satu level di atas suatu node. Child : successor satu level di bawah suatu node. Sibling : node-node yang memiliki parent yang sama dengan suatu node. Subtree : bagian dari tree yang berupa suatu node beserta descendant-nya dan memiliki semua karakteristik dari tree tersebut. Size : banyaknya node dalam suatu tree. Height : banyaknya tingkatan/level dalam suatu tree. Root : satu-satunya node khusus dalam tree yang tak punya predecssor. Leaf : node-node dalam tree yang tak memiliki seccessor. Degree : banyaknya child yang dimiliki suatu node. Sedangkan binary tree adalah sebuah pengorganisasian secara hirarki dari beberapa buah simpul, dimana masing-masing simpul tidak mempunyai anak lebih dari 2. Simpul yang berada di bawah sebuah simpul dinamakan anak (child) dari simpul tersebut. Simpul yang berada di atas sebuah simpul dinamakan induk (parent) dari simpul tersebut. 1.2 Permasalahan 1.2.1 Lengapilah file program bintree.c dengan menambahkan nBElement. 1.2.2 Buatlah tampilan menu bintree yang berisi pilihan isTreeEmpty, isUnerLeft, isUnerRight, isOneElement, isBin, dan nBElement.
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
BAB I
PENDAHULUAN
1.1 Dasar Teori
Tree merupakan salah satu bentuk struktur data tidak linier yang menggambarkan
hubungan yang bersifat hirarkis (hubungan one to many) antara elemen-elemen. Tree juga
dapat didefinisikan sebagai kumpulan simpul / node dengan satu elemen khusus yang disebut
root dan node lainnya terbagi menjadi himpunan-himpunan yang tak saling berhubungan satu
sama lainnya (disebut subtree). Berikut adalah istilah-istilah umum dalam tree :
Parent : predecessor satu level di atas suatu node.
Child : successor satu level di bawah suatu node.
Sibling : node-node yang memiliki parent yang sama dengan suatu node.
Subtree : bagian dari tree yang berupa suatu node beserta descendant-nya dan
memiliki semua karakteristik dari tree tersebut.
Size : banyaknya node dalam suatu tree.
Height : banyaknya tingkatan/level dalam suatu tree.
Root : satu-satunya node khusus dalam tree yang tak punya predecssor.
Leaf : node-node dalam tree yang tak memiliki seccessor.
Degree : banyaknya child yang dimiliki suatu node.
Sedangkan binary tree adalah sebuah pengorganisasian secara hirarki dari beberapa buah
simpul, dimana masing-masing simpul tidak mempunyai anak lebih dari 2. Simpul yang
berada di bawah sebuah simpul dinamakan anak (child) dari simpul tersebut. Simpul yang
berada di atas sebuah simpul dinamakan induk (parent) dari simpul tersebut.
1.2 Permasalahan
1.2.1 Lengapilah file program bintree.c dengan menambahkan nBElement.
1.2.2 Buatlah tampilan menu bintree yang berisi pilihan isTreeEmpty, isUnerLeft,
isUnerRight, isOneElement, isBin, dan nBElement.
BAB II
PEMBAHASAN
a. binTree.h
/*
Nama : Ayu Riana Devi Aprilia
Nim : 24010313120042
Judul : BinTree.h
tanggal : 28 November 2014
*/
#ifndef BINTREE_H
#define BINTREE_H
#include <stdlib.h>
#include <stdio.h>
#define nil NULL
//definisi dan spesifikasi
typedef int tipeInfo;
typedef struct tnode *address;
typedef struct tnode{
tipeInfo info;
address left;
address right;
}node;
typedef address BinTree;
typedef enum{
false, true
}boolean;
BinTree Tree (tipeInfo A, BinTree L, BinTree R);
tipeInfo Akar(BinTree BT);
BinTree Left(BinTree BT);
BinTree Right(BinTree BT);
boolean isTreeEmpty(BinTree BT);
boolean isUnerLeft(BinTree BT);
boolean isUnerRight(BinTree BT);
boolean isBin(BinTree BT);
boolean isOneElmt(BinTree BT);
void createBinTree(BinTree BT);
int nBElement(BinTree BT);
#endif
Program binTree.h pada dasarnya merupakan file header yang nantinya akan
dijadikan library oleh main program. pada program ini, terdapat pendeklarasian awal dari
procudere, selector, predikat , tipe bentukan maupun konstruktor yang digunakan.
Adapun pendeklarasian tipe bentukan, yaitu dengan menggunakan tipe data struct, tipe
data struct yang dideklarasikan ialah tipeInfo, tnode *address, tnode, struct
dari address first, dan tipe enumerasi yang menghasilkan return value boolean
yaitu true atau false.
Adapun pendeklarasian fungsi , konstruktor, selector maupun predikat dalam
program ini ialah sebagai berikut
a) BinTree Tree (tipeInfo A, BinTree L, BinTree R);
BinTree Tree merupakan suatu konstruktor. Konstruktor sendiri merupakan
fungsi yang otomatis akan dipanggil setiap kali melakukan instasiasi terhadap
suatu kelas dan digunakan untuk melakukan inisialisasi nilai dari data – data
yang terdapat di dalam kelas yang bersangkutan. Konstruktor BinTree sendiri
berfungsi untuk sebagai alokasi memori.
b) tipeInfo Akar(BinTree BT);
tipeInfo Akar merupakan suatu selector yang berfungsi untuk mengembalikan
nilai / mengirimkan nilai atau nilai dari suatu fungsi kepada fungsi yang lain
yang memanggilnya.
c) BinTree Left(BinTree BT);
Selector BinTree Left berfungsi untuk mengembalikan nilai / mengirimkan
nilai atau nilai dari suatu fungsi kepada fungsi yang lain yang memanggilnya.
d) BinTree Right(BinTree BT);
Selector BinTree Right berfungsi untuk mengembalikan nilai / mengirimkan
nilai atau nilai dari suatu fungsi kepada fungsi yang lain yang memanggilnya.
e) boolean isTreeEmpty(BinTree BT);
Boolean isTreeEmpty merupakan suatu predikat yang dapat mengirimkan
return value berupa true atau false. Dalam kasus ini, tree akan mengirimkan
nilai True jika pohon bernilai kosong.
f) boolean isUnerLeft(BinTree BT);
Boolean isUnerLeft merupakan suatu predikat yang dapat mengirimkan
return value berupa true atau false. Dalam kasus ini, tree akan mengirimkan
nilai True jika hanya memiliki ank sebelah kiri.
g) boolean isUnerRight(BinTree BT);
Boolean isUnerRight merupakan suatu predikat yang dapat mengirimkan
reurn value berupa true atau false. Dalam kasus ini, tree akan mengirimkan
nilai True jika pohon hanya memiliki anak sebelah kanan.
h) boolean isBin(BinTree BT);
Boolean isBin merupakan suatu predikat yang dapat mengirimkan return
value berupa true atau false. Dalam kasus ini, tree akan mengirimkan nilai
True jika pohon adalah pohon biner.
i) boolean isOneElmt(BinTree BT);
Boolean isOneElmt merupakan suatu predikat yang dapat mengirimkan return
value berupa true atau false. Dalam kasus ini, tree akan mengirimkan nilai
True jika pohon hanya memiliki satu elemen.
j) void createBinTree(BinTree BT);
procedure createBinTree digunakan untuk membuat/membentuk tree baru
pada program.
k) int nBElement(BinTree BT);
konstruktor int nBElement berfungsi untuk memberikan banyaknya jumlah
elemen dalam pohon biner.
b. binTree.c
/*
Nama : Ayu Riana Devi Aprilia
Nim : 24010313120042
Judul : BinTree.c
*/
#ifndef BINTREE_H
#define BINTREE_C
#include <stdio.h>
#include "BinTree.h"
//konstruktor
BinTree Tree (tipeInfo A, BinTree L, BinTree R){
//kamus lokal
address p;
//algoritma
//alokasi pointer penjelajah
p = (address) malloc (sizeof(node));
//pengisian akar
if (p != nil){
p -> info = A;
p -> left = L;
p -> right = R;
}
return p;
}
//selektor
tipeInfo Akar(BinTree BT){
//kamus lokal
//algoritma
return (BT -> info);
}
BinTree Left(BinTree BT){
//kamus lokal
//algoritma
return (BT -> left);
}
BinTree Right(BinTree BT){
//kamus lokal
//algoritma
return (BT -> right);
}
//predikat
boolean isTreeEmpty(BinTree BT){
//mengirimkan TRUE jika binary tree kosong
//kamus lokal
//algoritma
return(BT == nil);
}
boolean isUnerLeft(BinTree BT){
//mengirimkan TRUE jika pohon BT hanya mempunyai anak kiri
//kamus lokal
//algoritma
return((Right(BT) == nil) && (Left(BT) != nil));
}
boolean isUnerRight(BinTree BT){
//mengirimkan TRUE jika pohon BT hanya mempunyai anak kanan
//kamus lokal
//algoritma
return((Right (BT) != nil) && (Left(BT) == nil));
}
boolean isBin(BinTree BT){
//mengirimkan TRUE jika pohon BT adalah pohon biner
//kamus lokal
//algoritma
return((Right (BT) != nil) && (Left(BT) != nil));
}
boolean isOneElmt(BinTree BT){
//mengirimkan TRUE jika pohon BT adalah pohon yang hanya memiliki satu
elemen saja
//kamus lokal
//algoritma
return((Right (BT) == nil) && (Left(BT) == nil));
}
void createBinTree(BinTree BT){
/*
I.S : pohon biner belum trebentuk
F.S : pohon biner suah terbentuk
proses : membentuk pohon biner
*/
//kamus
//algoritma
BT = nil;
}
int nBElement(BinTree BT){
//memberikan banyaknya elemen dari pohon P
//kamus
//algoritma
int NB;
if(BT == nil){
NB = 0;
}
else
{
NB = nBElement(Left (BT)) + 1 + nBElement(Right (BT));
}
return NB;
}
#endif
Program BinTree.c pada dasarnya berisi realisasi dari prosedur maupun tipe bentukan
yang telah dideklarasikan sebelumnya pada file header BinTree.h. Dalam program ini
digunakan library stdlib.h dan stdio.h serta digunakan library dengan memanggil file
header BinTree.h. Pada program ini berisi realisasi prosedur, selector, konstruktor
maupun predikat yaitu sebagai berikut
a) BinTree Tree (tipeInfo A, BinTree L, BinTree R);
BinTree Tree merupakan konstruktor yang digunakan untuk sebagai alokasi
memori. Adapun alokasi memori dari pointer penjelajah yaitu p = (address)
malloc (sizeof(node)); dan untuk pengisian akar pada tree digunakan
struktur percabangan if dimana digunakan untuk mengecek apakah pointer
kosong atau tidak? (if (p != nil)) Jika iya maka,
p -> info = A;
p -> left = L;
p -> right = R;
Jika tidak maka, return p (mengembalikan nilai p).
b) tipeInfo Akar(BinTree BT);
selector tipeInfo Akar berfungsi untuk mengembalikan nilai / mengirimkan nilai
atau nilai dari suatu fungsi kepada fungsi yang lain yang memanggilnya. Jadi jika
dapat dikatakan bahwa tipeInfo akar akan mengirimkan nilai dari fungsi BinTree
(BT) ke info (return (BT -> info)).
c) BinTree Left(BinTree BT);
Selector BinTree Left berfungsi untuk mengembalikan nilai / mengirimkan nilai
atau nilai dari suatu fungsi kepada fungsi yang lain yang memanggilnya.
Jadi jika dapat dikatakan bahwa tipeInfo akar akan mengirimkan nilai dari fungsi
BinTree (BT) ke left (return (BT -> left)).
d) BinTree Right(BinTree BT);
Selector BinTree Right berfungsi untuk mengembalikan nilai / mengirimkan
nilai atau nilai dari suatu fungsi kepada fungsi yang lain yang memanggilnya.
Jadi jika dapat dikatakan bahwa tipeInfo akar akan mengirimkan nilai dari fungsi
BinTree (BT) ke right (return (BT -> right)).
e) boolean isTreeEmpty(BinTree BT);
Boolean isTreeEmpty digunakan untuk mengecek apakah tree kosong atu tidak?.
Pada algoritma ini terdapat nilai balik jika tree kosong (return(BT == nil))
dan akan mengirimkan return value berupa Boolean yaitu true atau false yang
pada kasus ini akan bernilai true jika tree kosong.
f) boolean isUnerLeft(BinTree BT);
Boolean isUnerLeft memiliki nilai balik jika anak sebelah kanan kosong dan anak
sebelah kiri tidak kosong (return((Right(BT) == nil) && (Left(BT) !=
nil))), dan akan mengirimkan return value berupa Boolean yaitu true atau false
yang pada kasus ini akan bernilai true jika pohon hanya memiliki anak sebelah
kiri.
g) boolean isUnerRight(BinTree BT);
Boolean isUnerRight memiliki nilai balik jika anak sebelah kanan tidak kosong
dan anak sebelah kiri kosong (return((Right(BT) != nil) && (Left(BT) ==
nil))), dan akan mengirimkan return value berupa Boolean yaitu true atau false
yang pada kasus ini akan bernilai true jika pohon hanya memiliki anak sebelah
kanan.
h) boolean isBin(BinTree BT);
Boolean isBin memiliki nilai balik jika anak sebelah kanan dan anak sebelah kiri
sama-sama tidak kosong (return((Right(BT) != nil) && (Left(BT) !=
nil))), dan akan mengirimkan return value berupa Boolean yaitu true atau false
yang pada kasus ini akan bernilai true jika pohon adalah pohon biner.
i) boolean isOneElmt(BinTree BT);
Boolean isOneElmt memiliki nilai balik jika anak sebelah kanan dan anak sebelah
kiri sama-sama kosong (return((Right(BT) == nil) && (Left(BT) ==
nil))) atau dapat dikatakan bahwa pohon hanya memiliki nilai root/akar saja ,
dan akan mengirimkan return value berupa Boolean yaitu true atau false yang
pada kasus ini akan bernilai true jika pohon hanya memiliki satu elemen saja.
j) void createBinTree(BinTree BT);
procedure createBinTree digunakan untuk membuat/membentuk tree baru pada
program.Pada algoritma program ini mengecek apakah dalam keadaan kosong
(BT = nil) jika iya maka elemen tree pertama yang diinputkan akan dibuat
k) int nBElement(BinTree BT);
konstruktor int nBElement berfungsi untuk memberikan banyaknya jumlah
elemen dalam pohon biner. Pertama-tama dicek apakah tree bernilai kosong atau
tidak? (if(BT == nil)). Jika iya maka jumlah nBElement adalah 0 (NB = 0)
dan jika tidak maka jumlah nBElement adalah jumlah anak sebelah kiri ditambah
1 ditambah jumlah anak sebelah kanan (NB = nBElement(Left (BT)) + 1 +
nBElement(Right (BT))). Dan pada konstruktor ini juga terdapat nilai balik
(return NB).
c. mfile.c
/*
Nama : Ayu Riana Devi Aprilia
Nim : 24010313120042
Judul : mfile.c
*/
#include <stdlib.h>
#include <stdio.h>
#include "BinTree.c"
int
main()
{
//kamus
BinTree A;
//algoritma
A = Tree(12, Tree
(14, Tree
(7, Tree(5, nil, Tree(9,nil,nil)),
Tree(8,nil,nil))
,nil),
Tree(17,
Tree(15,nil,
Tree(4,Tree(12,nil,nil), nil)),
Tree(4,nil,nil))
);
printf("Akar = %d \n", Akar(A)); //12
printf("Akar kiri = %d \n", Akar(Left(A))); //4
printf("Akar kiri kiri = %d \n", Akar(Left(Left(A)))); //7