2. Untuk mengetahui
apakah sebuah binary
tree adalah BST,
salah satu caranya adalah
dengan melakukan
print in order
BST : Binary Search Tree
3. 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.
6. 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 besar
Maka binary tree di atas adalah
BST
9. 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 besar
Maka binary tree di atas bukan
BST
14. Tinggi sebuah node :
Nilai terbesar antara tinggi node
kanan dan tinggi node kiri
ditambah 1.
Jika nodenya adalah NULL, maka
tingginya -1.
15. 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
1
0
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
16. BST tidak balance jika:
Ada node yang
tinggi node kirinya
dikurang
tinggi node kanannya
tidak sama dengan
-1, 0, 1
19. 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 yang
tinggi kirinya dikurang tinggi kanannya
di luar dari -1, 0 , 1.
Berarti BST ini balance.
24. •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.
27. 32 1078 10
Isi queue dengan
root
8
Karena queue tidak kosong, maka :
Node sebelah kiri 8 tidak kosong, masukkan
queue
Node sebelah kanan 8 tidak kosong,
masukkan queue
Keluarkan dan tampilkan 8
8
3 10
8
3
2 7
72
Karena queue tidak kosong, maka :
Node sebelah kiri 3 tidak kosong, masukkan
queue
Node sebelah kanan 3 tidak kosong,
masukkan queue
Keluarkan dan tampilkan 3
3
10
9 22
Karena queue tidak kosong, maka :
Node sebelah kiri 10 tidak kosong, masukkan
queue
Node sebelah kanan 10 tidak kosong,
masukkan queue
Keluarkan dan tampilkan 10
9 2210
9 22
2
1
Karena queue tidak kosong, maka :
Node sebelah kiri 2 tidak kosong, masukkan
queue
Node sebelah kanan 2 kosong
Keluarkan dan tampilkan 2
1
2
Karena queue tidak kosong, maka :
Node sebelah kiri 7 kosong
Node sebelah kanan 7 kosong
Keluarkan dan tampilkan 7
7
7
9
Karena queue tidak kosong, maka :
Node sebelah kiri 9 kosong
Node sebelah kanan 9 kosong
Keluarkan dan tampilkan 9
9
22
Karena queue tidak kosong, maka :
Node sebelah kiri 22 kosong
Node sebelah kanan 22 kosong
Keluarkan dan tampilkan 22
22
1
Karena queue tidak kosong, maka :
Node sebelah kiri 1 kosong
Node sebelah kanan 1 kosong
Keluarkan dan tampilkan 1
1
Queue sudah kosong, maka proses traversal sudah selesai
Tampilan program
3
39. • 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, atau
Jika 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
43. 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
24
20
24
Pertama periksa root...
22
Node bukan NULL
Tampilkan nilai node
22 == 24, nilai ditemukan dan pencarian
dihentikan.
22
Tampilan program
Banyak node
Nilai yang dicari
Path pencarian
45. 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
20
Pertama 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
46. Langkah di atas hanya bisa dilakuakan jika :
•Tree yang digunakan
adalah BST
•Tidak ada dua nilai atau
lebih yang sama di
dalam tree
48. 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).
49. •Node yang pertama diperiksa adalah root
•Jika :
oa ≤ isi node dan b > isi node, atau
ob ≤ isi node dan a > isi node, atau
oa == isi node dan b < isi node, atau
ob == 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
54. 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
56. 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
57. Reference :
Mark Allen Weiss, “AVL Tree”, Data Structures
& Algorithm Analysis in C++, (2) 1999, 143-
155
Source Code :
https://www.dropbox.com/sh/7b6m3j7v3semk8
y/s987IXfj4j/SC