Think Different Materi + UAS Mata Kuliah ASD (Semester Pendek) 7. ASD-Tree
Algoritma dan Struktur Data
Tree
Outline
1.
2.
3.
4.
Apakah Tree Structure itu ?
Binary Tree & implementasinya
Tree Traversal
Implementasi tree (selain binary tree)
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
Nama komponen pada Tree
node 1
node
leaf
4
2
3
6
5
8
leaf
root
9
leaf
7
leaf
leaf
10
node
Hubungan antar komponen
Hubungan antar elemen: parentchild, father-son, motherdaughter
Nama node: nama(angka) yang
dipakai untuk membedakan
sebuah node dengan node yang
lain. Dalam kuliah ini adalah
angka yang tertulis dalam
lingkaran.
Label: nilai yang diingat oleh
sebuah node
Tree vs Graph
– Tree: setiap node kecuali
root hanya memiliki sebuah
parent
– Graph: dapat memiliki lebih
dari sebuah parent
node 1
root
node 2
leaf
4
3
6
5
8
leaf
9
leaf
7
leaf
leaf
Contoh graph
10
node
Hubungan antar komponen
sibling:node-node yang
memiliki parent yang
sama
Ancestor dari node x:
node yang ditemukan,
ketika menyusuri tree ke
atas dari node x
Descendant dari node x:
node yang ditemukan
ketika menyusuri tree ke
bawah dari node x
node 1
node
leaf
4
2
3
6
5
8
leaf
root
9
leaf
7
leaf
leaf
10
node
Hubungan antar komponen
sibling:node-node
yang memiliki parent
yang sama
Ancestor dari node x:
node yang ditemukan,
ketika menyusuri tree
ke atas dari node x
Descendant dari node
x: node yang
ditemukan ketika
menyusuri tree ke
bawah dari node x
node 1
node
leaf
4
2
3
6
5
8
leaf
root
9
leaf
7
leaf
leaf
10
node
Hubungan antar komponen
sibling:node-node yang
memiliki parent yang
sama
Ancestor dari node x:
node yang ditemukan,
ketika menyusuri tree
ke atas dari node x
Descendant dari node x
: node yang ditemukan
ketika menyusuri tree
ke bawah dari node x
node 1
node
leaf
4
2
3
6
5
8
leaf
root
9
leaf
7
leaf
leaf
10
node
Level
0
1
2
4
6
5
8
9
3
1
7
2
10
3
Definisi TREE
Sebuah tree didefinisikan sebagai struktur y ang dibentuk
secara recursive 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 noden1~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
Definisi TREE
Sebuah tree didefinisikan sebagai struktur y ang dibentuk
secara recursive 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 noden1~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
n1
T2
2
1 n2
3
T3
1 n3
2
3
T4
1 n4
Definisi TREE
2. Dari k buah tree T1~Tk , dan masing-masing memiliki
root n1~nk.Jika node n adalah parent dari noden1~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
2
T1
6
8
7
12
T2
n1
13
9
3 n2
10
T3
4 n3
11
14
T4
5 n4
Ordered vs Unordered tree
Ordered tree
– Antar sibling terdapat urutan “usia”
– Node yang paling kiri berusia paling tua
(sulung), sedangkan node yang paling kanan
berusia paling muda (bungsu)
– Posisi node diatur atas urutan tertentu
Unordered tree
– Antar sibling tidak terdapat urutan tertentu
Outline
1.
2.
3.
4.
Apakah Tree Structure itu ?
Binary Tree & implementasinya
Tree Traversal
Implementasi tree (selain binary tree)
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)
Memiliki subtree di sebelah kanan (right subtree)
Memiliki baik left subtree maupun right subtree
HATI-HATI DALAM MENGGAMBAR BINARY TREE
a
a
b
a
a
b
b
a
c
b
Subtree (child) yang dimiliki
bukan kiri maupun kanan
Implementasi Binary Tree
struct node {
struct node *left;
struct node *right;
mydata
label;
}
left
right label
a
b
a
c
b
c
Contoh
A
10
10
14
14 18
14
B
18
H
26 38
26
C
D
26
18
56 78
56
E
56
100
78 F
100
G
100
H
B
38
C
38
A
G
D
78
E
F
Latihan 1
Gambarkan implementasi dari binary
tree berikut
10
20
C
40
A
30
B
D
50
80 G
F
E
60
70
90
I
H
100 J
Outline
1.
2.
3.
4.
Apakah Tree Structure itu ?
Binary Tree & implementasinya
Tree Traversal
Implementasi tree (selain binary tree)
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
Preorder
1.
2.
3.
Parent
Traverse the left subtree
Traverse the right subtree
A
B
H
D
C
E
F
G
A→B→C→D→E→G→F→H
Implementasi dalam bahasa C
struct node {
struct node *left;
struct node *right;
char
label;
}
void preorder(struct node *p)
{
if (p==NULL) return;
jika empty-tree, tidak perlu lakukan apa-apa
printf(“visit %c ”, p->label); tampilkan label node yang dikunjungi
traverse the left subtree
preorder(p->left);
preorder(p->right);
traverse the right subtree
}
Inorder
1.
2.
3.
Traverse the left subtree
Parent
Traverse the right subtree
A
B
H
D
C
E
F
G
C→B→G→E→D→F→A→H
Implementasi dalam bahasa C
struct node {
struct node *left;
struct node *right;
char
label;
}
void inorder(struct node *p)
{
jika empty-tree, tidak perlu lakukan apa-apa
if (p==NULL) return;
inorder(p->left);
traverse the left subtree
printf(“visit %c ”, p->label); tampilkan label node yang dikunjungi
inorder(p->right);
traverse the right subtree
}
Postorder
1.
2.
3.
Traverse the left
subtree
Traverse the right
subtree
Parent
A
B
H
D
C
E
F
G
C→G→E→F→D→B→H→A
Implementasi dalam bahasa C
struct node {
struct node *left;
struct node *right;
char
label;
}
void postorder(struct node *p)
{
if (p==NULL) return;
jika empty-tree, tidak perlu lakukan apa-apa
traverse the left subtree
postorder(p->left);
postorder(p->right);
traverse the right subtree
printf(“visit %c ”, p->label); tampilkan label node yang dikunjungi
}
1.
2.
3.
1.
2.
3.
1.
2.
3.
Parent
Traverse the left
subtree
Traverse the right
subtree
Traverse the left
subtree
Parent
Traverse the
right subtree
Traverse the left
subtree
Traverse the right
subtree
Parent
Latihan-2
Tuliskan hasil preorder, inorder dan postorder traversal
untuk binary tree berikut.
1.
Print
2.
A
3.
I
B
D
C
E
J
G
K
1.
L
2.
3.
F
H
1.
2.
3.
Traverse the left
subtree
Traverse the right
subtree
Traverse the left
subtree
Print
Traverse the
right subtree
Traverse the left
subtree
Traverse the right
subtree
Print
Outline
1.
2.
3.
4.
Apakah Tree Structure itu ?
Binary Tree & implementasinya
Tree Traversal
Implementasi tree (selain binary tree)
Teknik implementasi tree
Binary tree hanya memiliki dua anak: kiri dan kanan.
Karena itu implementasinya hanya memerlukan dua
buah pointer untuk masing-masing subtree.
Untuk implementasi tree yang memiliki sebarang
anak, dapat dilakukan dengan dua cara
– memakai linked-list
– memakai binary tree
Contoh
1
2
3
4
6
5
Implementasi memakai linked-list
3
1
2
3
4
1
6
5
5
2
23
23
5
37
37
35
87
77
77
10
87
15
95
95
25
10
3
15
4
label child
25
5
35
6
struktur yang
Merepresentasikan node
struktur yang merepresentasikan
koneksi antar node
Implementasi memakai binary-tree
1000
1 1001
1
2
3
4
6
5
1001
2 1003 1002
1003
3
label child sibling
1004
1002
6
1004
4
1005
1005
5
Implementasi memakai binary-tree
1000
1 1001
1
2
6
3
4
1001
2 1003 1002
1002
6
5
1003
3
1004
1004
4
1005
1005
5
Implementasi memakai binary-tree
Rotasi ke kanan 45°
1000
1 1001
1001
2 1003 1002
1003
3
1004
1002
6
1004
4
1005
1005
5
Latihan-3
Jelaskan implementasi tree berikut
a) memakai linked-list
b) memakai binary tree
10
50
C
100
300 G
250 F
B
D
A
150
E
200
H
350
450 J
400 I
500
K
Tree
Outline
1.
2.
3.
4.
Apakah Tree Structure itu ?
Binary Tree & implementasinya
Tree Traversal
Implementasi tree (selain binary tree)
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
Nama komponen pada Tree
node 1
node
leaf
4
2
3
6
5
8
leaf
root
9
leaf
7
leaf
leaf
10
node
Hubungan antar komponen
Hubungan antar elemen: parentchild, father-son, motherdaughter
Nama node: nama(angka) yang
dipakai untuk membedakan
sebuah node dengan node yang
lain. Dalam kuliah ini adalah
angka yang tertulis dalam
lingkaran.
Label: nilai yang diingat oleh
sebuah node
Tree vs Graph
– Tree: setiap node kecuali
root hanya memiliki sebuah
parent
– Graph: dapat memiliki lebih
dari sebuah parent
node 1
root
node 2
leaf
4
3
6
5
8
leaf
9
leaf
7
leaf
leaf
Contoh graph
10
node
Hubungan antar komponen
sibling:node-node yang
memiliki parent yang
sama
Ancestor dari node x:
node yang ditemukan,
ketika menyusuri tree ke
atas dari node x
Descendant dari node x:
node yang ditemukan
ketika menyusuri tree ke
bawah dari node x
node 1
node
leaf
4
2
3
6
5
8
leaf
root
9
leaf
7
leaf
leaf
10
node
Hubungan antar komponen
sibling:node-node
yang memiliki parent
yang sama
Ancestor dari node x:
node yang ditemukan,
ketika menyusuri tree
ke atas dari node x
Descendant dari node
x: node yang
ditemukan ketika
menyusuri tree ke
bawah dari node x
node 1
node
leaf
4
2
3
6
5
8
leaf
root
9
leaf
7
leaf
leaf
10
node
Hubungan antar komponen
sibling:node-node yang
memiliki parent yang
sama
Ancestor dari node x:
node yang ditemukan,
ketika menyusuri tree
ke atas dari node x
Descendant dari node x
: node yang ditemukan
ketika menyusuri tree
ke bawah dari node x
node 1
node
leaf
4
2
3
6
5
8
leaf
root
9
leaf
7
leaf
leaf
10
node
Level
0
1
2
4
6
5
8
9
3
1
7
2
10
3
Definisi TREE
Sebuah tree didefinisikan sebagai struktur y ang dibentuk
secara recursive 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 noden1~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
Definisi TREE
Sebuah tree didefinisikan sebagai struktur y ang dibentuk
secara recursive 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 noden1~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
n1
T2
2
1 n2
3
T3
1 n3
2
3
T4
1 n4
Definisi TREE
2. Dari k buah tree T1~Tk , dan masing-masing memiliki
root n1~nk.Jika node n adalah parent dari noden1~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
2
T1
6
8
7
12
T2
n1
13
9
3 n2
10
T3
4 n3
11
14
T4
5 n4
Ordered vs Unordered tree
Ordered tree
– Antar sibling terdapat urutan “usia”
– Node yang paling kiri berusia paling tua
(sulung), sedangkan node yang paling kanan
berusia paling muda (bungsu)
– Posisi node diatur atas urutan tertentu
Unordered tree
– Antar sibling tidak terdapat urutan tertentu
Outline
1.
2.
3.
4.
Apakah Tree Structure itu ?
Binary Tree & implementasinya
Tree Traversal
Implementasi tree (selain binary tree)
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)
Memiliki subtree di sebelah kanan (right subtree)
Memiliki baik left subtree maupun right subtree
HATI-HATI DALAM MENGGAMBAR BINARY TREE
a
a
b
a
a
b
b
a
c
b
Subtree (child) yang dimiliki
bukan kiri maupun kanan
Implementasi Binary Tree
struct node {
struct node *left;
struct node *right;
mydata
label;
}
left
right label
a
b
a
c
b
c
Contoh
A
10
10
14
14 18
14
B
18
H
26 38
26
C
D
26
18
56 78
56
E
56
100
78 F
100
G
100
H
B
38
C
38
A
G
D
78
E
F
Latihan 1
Gambarkan implementasi dari binary
tree berikut
10
20
C
40
A
30
B
D
50
80 G
F
E
60
70
90
I
H
100 J
Outline
1.
2.
3.
4.
Apakah Tree Structure itu ?
Binary Tree & implementasinya
Tree Traversal
Implementasi tree (selain binary tree)
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
Preorder
1.
2.
3.
Parent
Traverse the left subtree
Traverse the right subtree
A
B
H
D
C
E
F
G
A→B→C→D→E→G→F→H
Implementasi dalam bahasa C
struct node {
struct node *left;
struct node *right;
char
label;
}
void preorder(struct node *p)
{
if (p==NULL) return;
jika empty-tree, tidak perlu lakukan apa-apa
printf(“visit %c ”, p->label); tampilkan label node yang dikunjungi
traverse the left subtree
preorder(p->left);
preorder(p->right);
traverse the right subtree
}
Inorder
1.
2.
3.
Traverse the left subtree
Parent
Traverse the right subtree
A
B
H
D
C
E
F
G
C→B→G→E→D→F→A→H
Implementasi dalam bahasa C
struct node {
struct node *left;
struct node *right;
char
label;
}
void inorder(struct node *p)
{
jika empty-tree, tidak perlu lakukan apa-apa
if (p==NULL) return;
inorder(p->left);
traverse the left subtree
printf(“visit %c ”, p->label); tampilkan label node yang dikunjungi
inorder(p->right);
traverse the right subtree
}
Postorder
1.
2.
3.
Traverse the left
subtree
Traverse the right
subtree
Parent
A
B
H
D
C
E
F
G
C→G→E→F→D→B→H→A
Implementasi dalam bahasa C
struct node {
struct node *left;
struct node *right;
char
label;
}
void postorder(struct node *p)
{
if (p==NULL) return;
jika empty-tree, tidak perlu lakukan apa-apa
traverse the left subtree
postorder(p->left);
postorder(p->right);
traverse the right subtree
printf(“visit %c ”, p->label); tampilkan label node yang dikunjungi
}
1.
2.
3.
1.
2.
3.
1.
2.
3.
Parent
Traverse the left
subtree
Traverse the right
subtree
Traverse the left
subtree
Parent
Traverse the
right subtree
Traverse the left
subtree
Traverse the right
subtree
Parent
Latihan-2
Tuliskan hasil preorder, inorder dan postorder traversal
untuk binary tree berikut.
1.
2.
A
3.
I
B
D
C
E
J
G
K
1.
L
2.
3.
F
H
1.
2.
3.
Traverse the left
subtree
Traverse the right
subtree
Traverse the left
subtree
Traverse the
right subtree
Traverse the left
subtree
Traverse the right
subtree
Outline
1.
2.
3.
4.
Apakah Tree Structure itu ?
Binary Tree & implementasinya
Tree Traversal
Implementasi tree (selain binary tree)
Teknik implementasi tree
Binary tree hanya memiliki dua anak: kiri dan kanan.
Karena itu implementasinya hanya memerlukan dua
buah pointer untuk masing-masing subtree.
Untuk implementasi tree yang memiliki sebarang
anak, dapat dilakukan dengan dua cara
– memakai linked-list
– memakai binary tree
Contoh
1
2
3
4
6
5
Implementasi memakai linked-list
3
1
2
3
4
1
6
5
5
2
23
23
5
37
37
35
87
77
77
10
87
15
95
95
25
10
3
15
4
label child
25
5
35
6
struktur yang
Merepresentasikan node
struktur yang merepresentasikan
koneksi antar node
Implementasi memakai binary-tree
1000
1 1001
1
2
3
4
6
5
1001
2 1003 1002
1003
3
label child sibling
1004
1002
6
1004
4
1005
1005
5
Implementasi memakai binary-tree
1000
1 1001
1
2
6
3
4
1001
2 1003 1002
1002
6
5
1003
3
1004
1004
4
1005
1005
5
Implementasi memakai binary-tree
Rotasi ke kanan 45°
1000
1 1001
1001
2 1003 1002
1003
3
1004
1002
6
1004
4
1005
1005
5
Latihan-3
Jelaskan implementasi tree berikut
a) memakai linked-list
b) memakai binary tree
10
50
C
100
300 G
250 F
B
D
A
150
E
200
H
350
450 J
400 I
500
K