Anda di halaman 1dari 41

IFS2101 –

Algoritma dan Struktur Data


Minggu 12 Sesi 1,2,3

Inte Christinawati Bu’ulӧlӧ


0118118201
Topik
 Struktur data linier vs non-linier
 Struktur Tree
 Binary Tree
 Varian Tree
 Traversal pada Tree

4/2/2019 ICB/Alsrudat/W13 2
Struktur data linier vs non-linier
• Struktur data linier adalah struktur data yang mengorganisasi data
secara linier dimana elemen-elemen disusun secara sekuensial, yang
berarti jika diambil salah satu elemen pada struktur data, elemen
tersebut memiliki 1 elemen pendahulu dan 0 atau 1 elemen pengikut.
Array 1 dimensi, linked list, stack, dan queue adalah struktur data
linier.
• Struktur data non-linier adalah struktur data yang tidak diorganisasi
secara sekuensial. Sebuah elemen data tidak perlu bertaut pada 1
elemen saja, tetapi bisa beberapa elemen data. Array multi dimensi,
tree, graph adalah struktur data non-linier.

4/2/2019 ICB/Alsrudat/W13 3
Struktur Tree

4/2/2019 ICB/Alsrudat/W13 4
Nature View of a Tree
leaves

branche
s root

4/2/2019 ICB/Alsrudat/W13 5
Computer Scientist’s View
root

leaves

branches
nodes

4/2/2019 ICB/Alsrudat/W13 6
Apakah Tree Structure itu ?
• Struktur data yang menunjukkan hubungan bertingkat (memiliki
hierarkhi)

• Contoh: direktori/folder pada windows atau linux


My Document

My Pictures My Music Struktur data

Pointer & Structure Linked list Tree

4/2/2019 ICB/Alsrudat/W13 7
Definisi pohon umum
• Pohon umum (Generic tree) merupakan kumpulan dari simpul (node) yang
terhubung/terkait dengan pointer.
• Pohon berakar (rooted tree) memiliki sebuah simpul khusus yang
merupakan simpul awal yang disebut dengan root r atau akar dan nol atau
lebih sub-pohon (sub-trees) T1 , T2 ,...,Tk dimana setiap root dari sub-tree
terhubung ke r.
• Root dari setiap sub-tree merupakan anak (child) dari r dan r adalah induk
(parent) dari setiap sub-tree.
• Setiap simpul pohon umum dapat memiliki anak berapa pun.
• Simpul tanpa anak disebut dengan daun (leaf).
• Simpul-simpul (nodes) dengan induk yang sama disebut saudara kandung
(siblings).

4/2/2019 ICB/Alsrudat/W13 8
Definisi pohon umum
• Sebuah lintasan dari n1 ke nk merupakan urutan dari n1 , n2 , …, nk
sedemikian hingga ni adalah induk dari ni+1 untuk
1≤i<k
• Untuk sembarang node ni , kedalaman ni adalah panjang lintasan unik dari
root ke ni . Dengan demikian, kedalaman root adalah 0 (nol).
• Untuk sembarang node ni , tinggi ni adalah panjang lintasan maksimum
dari ni ke leaf . Dengan demikian, tinggi daun (leaf) adalah 0 (nol).
• Dengan definisi pada halaman sebelumnya, tinggi pohon adalah sama
dengan tinggi root.
• Tinggi pohon selalu sama dengan kedalaman leaf terdalam pada pohon. Ini
sama dengan kedalaman pohon.

4/2/2019 ICB/Alsrudat/W13 9
Hubungan antar komponen
• Hubungan antar elemen: parent-child, node 1 root
father-son, mother-daughter
• Nama node: nama(angka) yang dipakai node 2 3

untuk membedakan sebuah node


dengan node yang lain. Dalam kuliah ini leaf
4 5 6
leaf
7 node
adalah angka yang tertulis dalam
lingkaran. 8 9 10
leaf
• Label: nilai yang diingat oleh sebuah leaf leaf

node
Contoh graph
• Tree vs Graph
• Tree: setiap node kecuali root hanya
memiliki sebuah parent
• Graph: dapat memiliki lebih dari
sebuah parent
4/2/2019 ICB/Alsrudat/W13 10
Terminologi padaTree
Root (akar): node tanpa parent (A)
Siblings (saudara): node-node yang memiliki  Degree dari suatu node: jumlah
parent yang sama (B,C,D), (I,J,K),(E,F),(G,H). child (anak) dari node tersebut.
Internal node: node dengan minimal 1 child  Degree dari suatu tree: jumlah
(A, B, C, F) maksimum node yang dimiliki
(subtree)-nya.
External node (leaf ): node tanpa children
(E, I, J, K, G, H, D)  Subtree: pohon yang terdiri dari
satu node dan descendant-nya.
Ancestors dari suatu node: node yang A
ditemukan, ketika menyusuri tree ke atas
dari suatu node.
Descendant dari suatu node: node yang
B C D
ditemukan ketika menyusuri tree ke bawah
dari suatu node.
Depth (tingkat/level) dari suatu node:
jumlah ancestor suatu node. E F G H

Height (tinggi) dari tree: maksimum tingkat


simpul yang ada pada pohon(3)
I J K
subtree
4/2/2019 ICB/Alsrudat/W13 11
Level/Tinggi/Kedalaman

1 s

2 3 1

4 5 6 7 2

8 9 10 3

4/2/2019 ICB/Alsrudat/W13 12
Latihan
Property Value
A
Number of nodes
C
Height
B
Root Node
Leaves
D E F Interior nodes
Ancestors of H
Descendants of B
G Siblings of E
Right subtree of A
H I Degree of this tree

4/2/2019 ICB/Alsrudat/W13 13
Definisi TREE
Sebuah tree didefinisikan sebagai struktur yang dibentuk secara
recursif oleh kedua rule berikut:
1. Sebuah node adalah sebuah tree. Node satu-satunya pada
tree ini berfungsi sebagai root maupun leaf.
2. Dari k buah tree T1~Tk , dan masing-masing memiliki root n1
~nk.Jika node n adalah parent dari node n1~nk, akan
diperoleh sebuah tree baru T yang memiliki root n. Dalam
kondisi ini, tree T1~Tkmenjadi sub-tree dari tree T. Root dari
sub-tree n1~nkadalah child dari node n .

Tree
root
1
leaf node

4/2/2019 ICB/Alsrudat/W13 14
Definisi TREE
Sebuah tree didefinisikan sebagai struktur yang dibentuk secara
recursif oleh kedua rule berikut:
1. Sebuah node adalah sebuah tree. Node satu-satunya pada tree
ini berfungsi sebagai root maupun leaf.
2. Dari k buah tree T1~Tk , dan masing-masing memiliki root n1
~nk.Jika node n adalah parent dari node n1~nk, akan
diperoleh sebuah tree baru T yang memiliki root n. Dalam
kondisi ini, tree T1~Tkmenjadi sub-tree dari tree T. Root dari
sub-tree n1~nkadalah child dari node n .
T1 1 n1 T2 T3 T4
1 n2 1 n3 1 n4

2 3 4 2 3 2

5 6 3
4/2/2019 ICB/Alsrudat/W13 15
Definisi TREE

2. Dari k buah tree T1~Tk , dan masing-masing memiliki root n1~nk. Jika
node n adalah parent dari node n1~nk, akan diperoleh sebuah tree
baru T yang memiliki root n. Dalam kondisi ini, tree T1~Tkmenjadi
sub-tree dari tree T. Root dari sub-tree n1~nkadalah child dari node
n.
1 n
T

T1 2 n1 T2 T3 T4
3 n2 4 n3 5 n4

6 7 8 9 10 11

12 13 14

4/2/2019 ICB/Alsrudat/W13 16
Varian tree
• Ada beberapa varian tree generik yang dibedakan oleh struktur
pengorganisasian data pada tree.
• Beberapa varian tersebut adalah
• Binary tree: tree dengan jumlah anak sebanyak 2 untuk setiap node.
• Binary search tree: binary tree dengan properti tambahan yakni, untuk setiap
node x pada, tree nilai kunci pada sub-tree sebelah kiri x selalu lebih kecil dari
nilai kunci x, sedangkan nilai kunci pada sub-tree sebelah kanan x selalu lebih
besar dari nilai kunci x.
• AVL tree: Binary search tree yang seimbang (self-balancing binary search
tree).

4/2/2019 ICB/Alsrudat/W13 17
Varian tree
• Red-black tree: binary search tree yang seimbang dimana setiap node
diberi warna merah (red) atau hitam sesuai dengan aturan red black
tree.
• B-tree: suatu struktur tree yang menyimpan data secara terurut
dimana anak (child) dari suatu node bisa lebih dari 2. Jadi b-tree
bukanlah pohon biner. Properti yang penting adalah tree harus
seimbang (balanced). B-tree lazim dipakai untuk menyimpan indeks
tabel pada basis data

4/2/2019 ICB/Alsrudat/W13 18
Binary Tree

4/2/2019 ICB/Alsrudat/W13 19
Definisi

Definisi Binary Tree


1. Sebuah tree yang kosong juga merupakan sebuah binary tree
2. Binary tree harus memenuhi salah satu syarat berikut
 Tidak memiliki anak
 Memiliki subtree di sebelah kiri (left subtree/pohon condong kiri)
 Memiliki subtree di sebelah kanan (right subtree/pohon condong kanan)
 Memiliki baik left subtree maupun right subtree

HATI-HATI DALAM MENGGAMBAR BINARY TREE

a a a a a

b b b c b

Subtree (child) yang dimiliki


4/2/2019 ICB/Alsrudat/W13 bukan kiri maupun kanan 20
Pohon pencarian biner (binary search tree)
• Pohon pencarian biner atau binary search tree adalah pohon biner
dengan properti tambahan yakni, untuk setiap node x pada pohon,
nilai kunci pada sub-tree sebelah kiri x selalu lebih kecil dari nilai kunci
x, sedangkan nilai kunci pada sub-tree sebelah kanan x selalu lebih
besar dari nilai kunci x.

4/2/2019 ICB/Alsrudat/W13 21
Contoh pohon pencarian biner
• Gambar sebelah kiri adalah pohon pencarian biner, sedangkan
sebelah kanan bukan pohon pencarian biner.

4/2/2019 ICB/Alsrudat/W13 22
Pohon pencarian biner contoh efisien dan
tidak efisien

4/2/2019 ICB/Alsrudat/W13 23
Definisi Binary Tree
typedef int infotype;
typedef struct tNode *address;
typedef struct tNode {
infotype Info;
address Left;
address Right;
} node;
typedef address BinTree;

4/2/2019 ICB/Alsrudat/W13 24
Definisi Prototype (1)
• BinTree MakeTree (infotype Akar);
//I.S. Sembarang F.S. Menghasilkan sebuah pohon P
//Menghasilkan sebuah pohon biner P dari A, dengan L = Nil, dan R = Nil, jika
alokasi berhasil
//Menghasilkan pohon P yang kosong (Nil) jika alokasi gagal
• boolean IsEmpty(BinTree T);
/* mengembalikan true apabila BinTree merupakan pohon kosong */
• BinTree InsertNode(infotype X, BinTree P);
//Menambahkan satu buah node ke Binary Tree dengan aturan pembentukan
binary tree
• boolean Search (BinTree P, infotype X); //Mengirimkan true jika ada node dari
T yang bernilai X
4/2/2019 ICB/Alsrudat/W13 25
Definisi Prototype (2)
• address FindMin(BinTree P);
//mencari node dengan nilai minimum
• address FindMax(BinTree P);
//mencari node dengan nilai maximum
• void DeleteNode (BinTree *P, infotype X);
//I.S. Pohon P tidak kosong
F.S. Nilai X yang dihapus pasti ada, sebuah node dengan nilai X dihapus
• void PrintPreOrder(BinTree P);
/* menuliskan informasi secara preorder spt yg dijelaskan*/

4/2/2019 ICB/Alsrudat/W13 26
Implementasi Binary Tree

typedef struct tNode {


infotype Info;
address Left;
address Right;
} node; Left Right Info

b b

a c

a c

4/2/2019 ICB/Alsrudat/W13 27
void MakeTree (infotype Akar, BinTree *P);

1 BinTree MakeTree (infotype Akar)


Left Right Akar 2 {
3 BinTree P;
4 P =(address) malloc(sizeof(node));
Nil Nil 5 if (P!=Nil) {
6 Akar(P)=Akar;
7 Left(P) = Nil;
8 Right(P) = Nil;
9 }
10 return P;
11 }

4/2/2019 ICB/Alsrudat/W13 28
void InsertNode(infotype X, BinTree *P);

Left Right Akar


1 BinTree InsertNode(infotype X, BinTree P){
2 if(IsTreeEmpty(P)){
3 P=MakeTree(X);
Left Right X Nil
4 }else{
5 if(X < P->Info)
6 P->Left=InsertNode(X,P->Left);
7 else if (X > P->Info)
Nil Nil
8 P->Right=InsertNode(X,P->Right);
9 }
Left Right Akar 10 return P;
11 }

Nil Left Right X

Nil Nil

4/2/2019 ICB/Alsrudat/W13 29
boolean Search (BinTree P, infotype X);

1 boolean IsTreeEmpty (BinTree P)


2 {
Left Right 6 3 return (P==Nil);
4 }
5 boolean Search (BinTree P, infotype X)
2 8 6 {
7 if (IsTreeEmpty(P)) {
8 return false;
Nil Nil 9 }
10 if (X==P->Info) {
1 4
11 return true;
12 }
Nil Nil 13 else {
Nil 14 if(X < P->Info)
3
15 return Search(Left(P), X);
16 else if (X > P->Info)
17 return Search(Right(P), X);
18 }
4/2/2019
19 }
ICB/Alsrudat/W13 30
address FindMin(BinTree P);
address FindMax(BinTree P);
1 address FindMin(BinTree P){
2 if(IsTreeEmpty(P))
3 return Nil;
Left Right 6
4 else
5 if(Left(P) == Nil)
6 return P;
2 8 7 else
8 return FindMin(Left(P));
Nil Nil 9 }
10
1 4 11 address FindMax(BinTree P){
12 if(!IsTreeEmpty(P)){
Nil 13 while(!IsTreeEmpty(Right(P)))
Nil
Nil 14 { P=Right(P);}
3 15 return P;
16 }else
17 return Nil;
18 }

4/2/2019 ICB/Alsrudat/W13 31
void DeleteNode (BinTree *P, 1 BinTree DeleteNode (BinTree P, infotype X){
infotype X); 2 address temp;
3 if(IsTreeEmpty(P))
4 printf("Nilai tidak ditemukan \n");
5 else if(X < P->Info)
6 Left(P) = DeleteNode(Left(P), X);
Left Right 6 7 else if (X > P->Info)
8 Right(P) = DeleteNode(Right(P), X);
9 else{
10 if(Left(P) && Right(P)){
2 8 11 temp =FindMin (Right(P));
12 P->Info = temp->Info;
Nil Nil 13 Right(P) = DeleteNode(Right(P), P->Info);
14 }else{
1 4 15 temp = P;
16 if(IsTreeEmpty(Left(P)))
Nil Nil 17 P=Right(P);
Nil 18 else if (IsTreeEmpty(Right(P)))
3 P = Left(P);
19
20 free(temp);
21 }
22 }
23 return P;
4/2/2019 ICB/Alsrudat/W13 32
24 }
Tree Traversal

4/2/2019 ICB/Alsrudat/W13 33
Definisi Tree Traversal
 Teknik menyusuri tiap node dalam sebuah tree secara sistematis, sehingga
semua node dapat dan hanya satu kali saja dikunjungi
 Ada tiga cara traversal:
 preorder
 inorder
 postorder
 Untuk tree yang kosong, traversal tidak perlu dilakukan

4/2/2019 ICB/Alsrudat/W13 34
Preorder A

1. Visit the root B H


2. Traverse the left subtree
3. Traverse the right subtree C D

E F

A→B→C→D→E→G→F→H

4/2/2019 ICB/Alsrudat/W13 35
void PrintPreOrder(BinTree P)

Left Right 6
1 void PrintPreOrder(BinTree P){
2 if (!IsTreeEmpty(P)){
2 8 3 printf("%d ", P->Info);
4 PrintPreOrder(Left(P));
Nil Nil 5 PrintPreOrder(Right(P));
6 }
1 4
7 }
Nil
Nil
3

6 2 1 4 3 8

4/2/2019 ICB/Alsrudat/W13 36
Inorder A

1. Traverse the left subtree B H


2. Visit the root
3. Traverse the right subtree C D

E F

C→B→G→E→D→F→A→H

4/2/2019 ICB/Alsrudat/W13 37
void PrintInOrder(BinTree P)

Left Right 6
1 void PrintInOrder(BinTree P){
2 if (!IsTreeEmpty(P)){
2 8 3 PrintInOrder (Left(P));
4 printf("%d ", P->Info);
Nil Nil 5 PrintInOrder (Right(P));
6 }
1 4
7 }
Nil
Nil
3

4/2/2019 ICB/Alsrudat/W13 38
Postorder A

1. Traverse the left subtree B H


2. Traverse the right subtree
3. Visit the root C D

E F

C→G→E→F→D→B→H→A

4/2/2019 ICB/Alsrudat/W13 39
void PrintPostOrder(BinTree P)

Left Right 6
1 void PrintPostOrder(BinTree P){
2 if (!IsTreeEmpty(P)){
2 8 3 PrintPostOrder(Left(P));
4 Print PostOrder(Right(P));
Nil Nil 5 printf("%d ", P->Info); }
6 }
1 4
7
Nil
Nil
3

4/2/2019 ICB/Alsrudat/W13 40
Terima kasih

4/2/2019 ICB/Alsrudat/W13 41

Anda mungkin juga menyukai