Tree dan Kawan-kawan (Programming)
-
Upload
fahrul-razi -
Category
Engineering
-
view
220 -
download
4
Transcript of Tree dan Kawan-kawan (Programming)
Binary Tree==BST
?
Untuk mengetahui apakah sebuah binary
tree adalah BST,salah satu caranya adalah
dengan melakukanprint in order
BST : Binary Search Tree
Print in order, melakukan print node sebelah kiri, kemudian induknya, kemudian node sebelah kanan.m
Jika tampilan tree dalam print in order terurut dari kecil ke besar, maka tree tersebut BST, jika tidak maka tree tersebut bukan BST.
10
3 15
216
9
7
141
2
Binary Tree
Apakah binary tree di atas adalah
BST ?
Lakukan print in order pada tree di atas
10
3 15
216
9
7
141
2
1
2
3
4
5
6
7
8
9
10
1 2 3 6 7 10 14 15 219
Hasil print in order sudah urut
dari kecil ke besarMaka binary tree di atas adalah
BST
8
7
2
10
3 9 22
Binary Tree
Apakah binary tree di atas adalah
BST ?
8
7
2
10
3 9 22
Lakukan print in order pada tree di atas
1
2
3
4
5
6
7
2 227 3 8 9 10
Hasil print in order tidak urut
dari kecil ke besarMaka binary tree di atas bukan
BST
Tampilan Program
BST balance
?
Untuk mengetahui apakah sebuah BST
balance dapat diketahui dengan melakukan pengecekkan tinggi
sebuah node
Mencari tinggi (height)
sebuah node ?
Tinggi sebuah node :
Nilai terbesar antara tinggi node kanan dan tinggi node kiri ditambah 1.
Jika nodenya adalah NULL, maka tingginya -1.
10
15
21
Tinggi Node 21• Node kirinya NULL = -1• Node kanannya NULL = -1• Nilai terbesar di antara
keduanya adalah -1• Tinggi node 21 adalah
-1+1=0
10
2
Tinggi Node 15• Node kirinya NULL = -1• Node kanannya = 0• Nilai terbesar di antara
keduanya adalah 0• Tinggi node 15 adalah
0+1=1
Tinggi Node 10• Node kirinya NULL = -1• Node kanannya = 1• Nilai terbesar di antara
keduanya adalah 1• Tinggi node 10 adalah
1+1=2
BST tidak balance jika:Ada node yang
tinggi node kirinyadikurang
tinggi node kanannyatidak sama dengan
-1, 0, 1
10
3
15
21
14
1
-1-(-1)=0
-1-(0)=-1
-1-(1)=-2
-1-(-1)=0
1-2=-1
0-(-1)=1
Apakah BST berikut balance?10, 3, 14, 15, 1, 21
Ada node yang tinggi kiri dikurang tinggi kanannyatidak sama dengan -1, 0 , 1.Berarti BST ini tidak balance.
Tampilan Program
Apakah BST berikut balance?8, 3 ,10, 22, 9, 2, 1, 7
8
3
2
1
10
7 9 22-1-(-1)=0-1-(-1)=0-1-(-1)=0
-1-(-1)=0
0-0=0
0-(-1)=1
1-0=1
2-1=1
Tidak ada node yangtinggi kirinya dikurang tinggi kanannyadi luar dari -1, 0 , 1.Berarti BST ini balance.
Tampilan Program
Tree traversal BFS,gunakan queue
?
Tree traversal dengan BFS artinya menampilkan
semua isi nodeLevel 0 Level n-1
BFS : Breadth-first search
Langkah-langkahtree traversal dengan
BFSdengan bantuan
queue
•Inisialisasi isi node pertama queue dengan
root (front).
•Ulang selama queue tidak kosong.
oJika node (front) sebelah kiri tidak kosong,
masukkan datanya ke dalam queue.
oJika node (front) sebelah kanan tidak
kosong, masukkan datanya ke dalam queue.
oDequeue dan tampilkan node front.
8, 3 ,10, 22, 9, 2, 1, 7
8
3
2
1
10
7 9 22
Lakukan tree traversal pada
tree di atas
32 1078 10
Isi queue dengan root
8
Karena queue tidak kosong, maka :Node sebelah kiri 8 tidak kosong, masukkan queueNode sebelah kanan 8 tidak kosong, masukkan queueKeluarkan dan tampilkan 8
8
3 10
8
3
2 7
72
Karena queue tidak kosong, maka :Node sebelah kiri 3 tidak kosong, masukkan queueNode sebelah kanan 3 tidak kosong, masukkan queueKeluarkan dan tampilkan 3
3
10
9 22
Karena queue tidak kosong, maka :Node sebelah kiri 10 tidak kosong, masukkan queueNode sebelah kanan 10 tidak kosong, masukkan queueKeluarkan dan tampilkan 10
9 2210 9 22
2
1Karena queue tidak kosong, maka :Node sebelah kiri 2 tidak kosong, masukkan queueNode sebelah kanan 2 kosongKeluarkan dan tampilkan 2
1
2
Karena queue tidak kosong, maka :Node sebelah kiri 7 kosongNode sebelah kanan 7 kosongKeluarkan dan tampilkan 7
77
9
Karena queue tidak kosong, maka :Node sebelah kiri 9 kosongNode sebelah kanan 9 kosongKeluarkan dan tampilkan 9
9
22
Karena queue tidak kosong, maka :Node sebelah kiri 22 kosongNode sebelah kanan 22 kosongKeluarkan dan tampilkan 22
22
1
Karena queue tidak kosong, maka :Node sebelah kiri 1 kosongNode sebelah kanan 1 kosongKeluarkan dan tampilkan 1
1
Queue sudah kosong, maka proses traversal sudah selesai
Tampilan program3
Tampilan Program
AVL Tree1, 26, 2, 25, 3, 24, 4, 23, 5, 22, 6
?
AVL tree adalah tree yang balance
Bagaimana tree yang balance?
Setiap kali menginputkan sebuah node baru, kita
akan periksa apakah treenya sudah balance
atau belum,
Jika belum, maka :
Ada empat cara untuk menyeimbangkan sebuah tree:
1.Rotate Left2.Rotate Right3.Rotate Right Left4.Rotate Left Right
A
B
D C
Node
TMP
A
C
Node
Node
Seimbangkan BST berikut
Rotate LeftBST sudah balance
Seimbangkan BST berikut
Rotate Right
B
D
A
C
Node
TMP
D
ANode
Node
BST sudah balance
126 2253
244
235
226 Rotate Right LeftRotate Right
1
26
2
2
261
25
3
2
251
3 26
24
2 25
1
3
2624
4
23
Rotate Left Right
2 25
1
3
2623
4 24
5
2 23
1
3
254
5 2624
22
Rotate Left
2 23
1
3
255
4 262422
6
2
23
1
3
25
5
4
2624
22
6
Semua input sudah dimasukkan. Tree di atas adalah hasilnya, berupa
AVL tree dan tentunya sudah balance
Tampilan Program
Path pencarian nilaisuatu BST
?
Langkah-langkah mencari suatu nilai
pada BST dan menampilkan path
pencariannya
• Tampilkan node yang diperiksa• Jika nilai node sama dengan X, X ditemukan. Kalau
tidak,• Jika nilai node lebih besar dari X dan node di
sebelah kiri adalah NULL, atauJika nilai node lebih kecil dari X dan node di sebelah kanan adalah NULL, maka X tidak ditemukan, kalau tidak,• Jika nilai node lebih besar dari X, periksa node di
sebelah kiri. Kalau tidak,• Jika nilai node lebih kecil dari X, periksa node di
sebelah kanan.
Sebut saja nilai yang dicari adalah X
Node pertama yang diperiksa adalah root.
20
11 24
5 18 22 30
root
20
11 24
5 18 22 30
3 9 21 23 27 27
10
20, 11, 5, 24, 18, 30, 35, 22, 3, 21, 9, 10, 27, 23
INI BST...!!
Cari angka22
dari BST di atas
20
Node bukan NULL
Tampilkan nilai node
22 != 20
22 > 20 dan node sebelah kanan bukan NULL
22 > 20, maka periksa node sebelah kanan
20
24
Node bukan NULL
Tampilkan nilai node
22 != 24
22 < 24 dan node sebelah kiri bukan NULL
22 < 24, maka periksa node sebelah kiri
2420
24
Pertama periksa root...
22
Node bukan NULL
Tampilkan nilai node
22 == 24, nilai ditemukan dan pencarian
dihentikan.
22Tampilan program
Banyak node
Nilai yang dicari
Path pencarian
Cari angka8
dari BST di atas
Node bukan NULL
Tampilkan nilai node
8 != 9
8 < 9 dan node sebelah kiri NULL,
maka nilai tidak dapat ditemukan dan
pencarian dihentikan.
Node bukan NULL
Tampilkan nilai node
8 != 5
8 > 5 dan node sebelah kanan bukan NULL
8 > 5, maka periksa node sebelah kanan
20Pertama periksa root...
Node bukan NULL
Tampilkan nilai node
8 != 20
8 < 20 dan node sebelah kiri bukan NULL
8 < 20, maka periksa node sebelah kiri
20
11
Node bukan NULL
Tampilkan nilai node
8 != 11
8 < 11 dan node sebelah kiri bukan NULL
8 < 11, maka periksa node sebelah kiri
11
5
5
9
9
Tampilan program
Banyak node
Nilai yang dicari
Path pencarian
Langkah di atas hanya bisa dilakuakan jika :
•Tree yang digunakan adalah BST•Tidak ada dua nilai atau lebih yang sama di dalam tree
LCA pada BST
?
Lowest Common Ancestor (LCA)Let T be a rooted tree with n nodes. The lowest common ancestor between two nodes v and w is defined as the lowest node in T that has both v and w as descendants (where we allow a node to be a descendant of itself).
•Node yang pertama diperiksa adalah root•Jika :oa ≤ isi node dan b > isi node, atauob ≤ isi node dan a > isi node, atauoa == isi node dan b < isi node, atauob == isi node dan a < isi node
Tampilkan isi node•Kalau tidak, jika:oa < isi node dan b < isi node
Periksa node sebelah kiri•Kalau tidak, jika:oa > isi node dan b > isi node
Periksa node sebelah kanan
10, 3, 15, 21, 6, 9, 7, 14, 1, 2
10
3 15
216
9
7
141
2
Cari LCA dari 1 dan 14
Periksa root
10
1 lebih kecil dari 10 dan 14 lebih besar dari 10
Maka LCA dari 1 dan 14 adalah 10
Cari LCA dari 3 dan 9
Periksa root
10
9 lebih kecil dari 10 dan 3 lebih kecil dari 10
Maka periksa node sebelah kiri
3
9 lebih besar dari 3 dan 3 sama dengan 3 (node yang dicari)
Maka LCA dari 3 dan 9 adalah 3
Tampilan Program
Cara di atas hanya dapat digunakan jika :
• Tree yang digunakan adalah BST
• Tidak ada dua buah atau lebih isi node yang sama
• Dua buah node yang di cari LCAnya harus ada di dalam tree
Reference :Mark Allen Weiss, “AVL Tree”, Data Structures & Algorithm Analysis in C++, (2) 1999, 143-155
Source Code :https://www.dropbox.com/sh/7b6m3j7v3semk8y/s987IXfj4j/SC
Oleh
Muhammad Fahrul Razi5113100105Teknik InformatikaInstitut Teknologi Sepuluh November