Tree

advertisement
Struktur Data
Tree
Eka Rahayu S. (2 Agustus 2011)
Topik Bahasan
• Struktur data TREE
• Operasi dalam TREE
• Rekursi (untuk kepentingan TREE)
Tree
Root
Node/ Vertex/ Point
Edge/ Branch / Line
8
4
8
Height
6
6
10
Subtree
4
4
7
3
1
7
10
3
12
1
12
14
15
14
19
19
20
15
20
18
18
11
Leaf
Balanced Tree:
11
Sebuah Tree dikatakan seimbang ketika rata-rata tinggi tiap
subtree adalah sama
13
13
17
17
21
21
22
22
Binary Tree
Max: 2 cabang
(cabang kiri dan cabang kanan)
Cabang kiri
Untuk nilai yang
lebih kecil
8
6
4
Cabang kanan
Untuk nilai yang
lebih besar atau
sama dengan
10
7
12
11
Jenis Tree yang Lain
1. Termasuk dalam golongan  n-ary Tree
• Binary Tree
• Ternary Tree
(max 2 cabang)
(max 3 cabang)
2. Binary Search Tree
• Red Black Tree
• AA-Tree
• AVL Tree
3. Multiway Tree
• B-Tree
(ada warna pada tiap node)
(penyederhanaan RB-Tree)
(Adelson-Velskii dan Landis)
Implementasi Tree dalam Linked List
Head
1
2
3
5
6
4
7
9
8
10
Nyicil:
mari kita buat struktur data tree dengan
[double] linked list
Operasi dalam Tree
•
•
•
•
Insert
Traverse
Search
Delete
(menambahkan nilai)
(menelusuri tiap node tree)
(mencari suatu nilai)
(menghapus nilai)
Sumber: http://en.wikipedia.org/wiki/Binary_tree
[1] Proses Insert
• Jika root masih kosong
– Node baru adalah root
• Jika tidak (root sudah terbentuk)
– Cari posisi yang masih kosong
Jika LEBIH KECIL, cari posisi kiri
Jika LEBIH BESAR, cari posisi kanan
– Node baru menempati posisi kosong tersebut
.: insert :.
Ternyata
posisi
saat
ini
sudah
terisi,
Kondisi
Maka,
Cek
Cek,
Ulangi
Jika
Kebetulan,
Begitu
node
ternyata
apakah
kembali,
apakah
jadikan
kembali:
terus
awal,
root
baru
cabang
kanannya
root
node
selanjutnya
node
apakah
root
sudah
node
lebih
nya
baru
masih
baru
kirinya
baru
ada
terisi.
KECIL
masih
root
masih
lebih
lebih
untuk
isinya.
kosong.
sebagai
masih
masih
dari
kosong?
kosong.
KECIL
BESAR
node
setiap
root.
dari
kali
Sehingga
tidak
bisa
diisi
node
baru.
kosong,
kosong?
Maka
yang
Cek,
dari
Maka,
proses
node
apakah
ditunjuk,
ditunjuk
cari
cari
tambahkan
insert....
maka
yang
posisi
posisi
node
saat
node
maka
ditunjuk
kosong
kosong
baru
node
ini?
baru
telusuri
lebih
untuk
baru
saat
untuk
ditambahkan
cabang
ini,
KECIL
ke
node
node
cabang
maka
dari yang ditunjuk
Maka,
harus
penelusuran
kembali.
kirinya.
pada
baru.
Jika
saat
telusuri
kanan.
iya,
ini?
cabang
KANAN
maka
Jika dilakukan
iya,
kirinya.
telusuri
nya.
makasisi
telusuri
KIRInya.
sisi KIRInya.
root
7
5
7
5
6
Perintah:
INSERT  7
INSERT  5
INSERT  6
Cobalah!
•
•
•
•
•
•
•
Insert 9
Insert 15
Insert 5
Insert 7
Insert 10
Insert 19
Insert 11
Bagaimanakah bentuk
TREE nya?
Nyicil:
Coba lengkapi Tree yang tadi kita buat dengan
procedure insert!
[2] Proses Traverse
• Breadth First Search (BFS)
– Pencarian yang melebar (pada setiap level)
– Memanfaatkan Queue
• Depth First Search (DFS)
– Pencarian yang mendalam
– Dilakukan secara recursive
– Ada 3 jenis:
• Pre-order traversal
• In-order traversal
• Post-order traversal
Breadth First Search (breadth = melebar)
Queue untuk pengaksesan:
Expand
FIFO:
Lanjutkan:
DELETE
Dari
Dan
Pertama,
seterusnya....
10,
maka
semua
dari
lagi
telusuri
expand
expand
DELETE
1queue
node,
child
semua
dari
semua
(dapat
6yaitu
dari
root
childnya
810
child
8) 6
8
6
4
7
8
6
10
3
1
12
11
19
20
4
7
13
15
14
10 15 13
18
21
17
22
Intinya....
Setiap proses dilakukan ke kanan.
Menelusuri semua child dalam satu level, dilanjutkan dengan level dibawahnya.
3
1
Depth First Search
(depth = kedalam)
10
6
4
3
1
null
12
7
null
11
8
5
nullnull
Ingat kembali bahwa TREE
termasuk dalam struktur data
yang ORDERed.
null
14
13
Proses dilakukan dengan recursive:
• Menelusuri cabang kiri hingga null
• Setelah itu baru menelusuri cabang kanannya
 Dari cabang kanan, ditelusuri lagi cabang kirinya
 dst
Ingat kembali...
Apa perbedaan BFS dan DFS?
x-Order Traversal
1. In-Order Traversal
subtree kiri – root – subtree kanan
2. Pre-Order Traversal
root – subtree kiri – subtree kanan
3. Post-Order Traversal
subtree kiri – subtree kanan – root
Contoh!
10
6
5
19
21
15
17
• IN : 5, 6, 10, 15, 17, 19, 21 (subtree kiri saat di kanan, subtree kanan saat di kiri)
• PRE : 10, 6, 5, 19, 15, 17, 21 (saat penelusur ada di kiri)
• POST : 5, 6, 17, 15, 21, 19, 10 (saat penelusur ada di kanan)
[3] Proses Search
Dilakukan dengan memafaatkan proses Traverse
(saat pertama kali sebuah node berwarna abu-abu  pada contoh di slide
sebelumnya)
Nah....
Masalahnya, masihkah Anda ingat
bagaimana Recursive?
[4] Proses Delete
• Cari node yang akan dihapus
• Jika node tersebut tidak punya child, langsung hapus
• Namun jika punya satu child, arahkan pointer parent ke child
dari node yang akan dihapus
• Namun jika node yang akan dihapus punya dua anak:
– Opsi 1: cari child paling kanan dari subtree kiri, sebut sebagai replacer
– Opsi 2: cari child paling kiri dari subtree kanan, sebut sebagai replacer
– Ganti node yang akan dihapus dengan replacer
Download