İkili arama ağaçları (binary search trees) bst
DESCRIPTION
İkili Arama Ağaçları (Binary Search Trees) BST. Ders 5. İkili arama ağacı özelliği. x ikili arama ağacında herhangi bir düğüm olsun. Eğer y düğümü x’in sol alt ağacında ise key[y] ≤ key[x] Eğer y düğümü x’in sağ alt ağacında ise key[y] ≥ key[x]. İkili arama ağacı özelliği. - PowerPoint PPT PresentationTRANSCRIPT
İkili Arama Ağaçlarıİkili Arama Ağaçları(Binary Search Trees)(Binary Search Trees)
BSTBST
Ders 5
1
İkili arama ağacı özelliğiİkili arama ağacı özelliği
x ikili arama ağacında herhangi bir düğüm olsun.
– Eğer y düğümü x’in sol alt ağacında ise
key[y] ≤ key[x]
– Eğer y düğümü x’in sağ alt ağacında ise
key[y] ≥ key[x]
İkili arama ağacı özelliğiİkili arama ağacı özelliği
3
x ikili arama ağacında herhangi bir düğüm olsun.
Eğer y düğümü x’in sol alt ağacında ise key[y] ≤ key[x]
Eğer y düğümü x’in sağ alt ağacında ise key[y] ≥ key[x]
5
3 7
8
Kök
2 4
<5 >5
SolAASağAA
2
Kök
3
7
85
4
>2
SağAA
İkili Arama Ağaçları (BST)İkili Arama Ağaçları (BST)
• İki arama ağacı bağlı veri yapısı kullanılarak gerçekleştirilebilir.
• Ağaçtaki her düğüm 3 adet pointer alanına sahip bir nesnedir.
• Sol çocuk sol ile, sağ çocuk sağ ile ebeveyn ise p ile temsil edilir.
• NIL ya da NULL herhangi bir çocuk veya ebeveyn olmadığını ifade eder.
• Kök düğümü bir İAA’da p alanı NIL’e sahip tek düğümdür.
4
İkili Arama Ağaçlarında İşlemlerİkili Arama Ağaçlarında İşlemler
• Dolaşma (Traversal)
• Arama (Search)
• Minimum
• Maximum
• Successor
• Predessor
• Ekleme (Insertion)
• Silme (Deletion)
5
1-) Dolaşma (Traversal)1-) Dolaşma (Traversal)
Ağaç yapısı üzerinde herhangi bir düğüme erişme
sürecimize ağacı gezmek (traverse) denir. Bir ağacı
en çok bilinen üçdeğişik yöntemle gezebiliriz :
i) Sıralı (Inorder) ya da kök ortada
ii) Kök sonda (Postorder)
iii) Kök başta (Preorder)
6
Inorder-tree walkInorder-tree walk
)()(
)WALK(-TREE-INORDER 4
print 3
)WALK(-TREE-INORDER 2
NIL 1
)WALK(-TREE-INORDER
nnT
xright
xkey
xleft
x
x
thenif
7
Bu dolaşma yönteminde önce sol alt ağaç sonra alt ağacın kökü ve en sonda ise sağ alt ağaç dolaşılır.
Preorder-tree walkPreorder-tree walk
)()(
)WALK(-TREE-DER PREOR 4
)WALK(-TREE-DER PREOR 3
print 2
NIL 1
)WALK(-TREE-PREORDER
nnT
xright
xleft
xkey
x
x
thenif
Bu dolaşma yönteminde alt ağaçlardan önce kök dolaşılır.
8
PPostostorder-tree walkorder-tree walk
)()(
print 4
)WALK(-TREE-RDER POSTO 3
)WALK(-TREE-RDER POSTO 2
NIL 1
)WALK(-TREE-POSTORDER
nnT
xkey
xright
xleft
x
x
thenif
Bu dolaşma yönteminde ise alt ağaçlardan sonra kök dolaşılır.
9
6
3 7
2 5 8
Inorder-tree walkInorder-tree walk
)()(
)WALK(-TREE-INORDER 4
print 3
)WALK(-TREE-INORDER 2
NIL 1
)WALK(-TREE-INORDER
nnT
xright
xkey
xleft
x
x
thenif
2-Arama2-Arama
15
6 18
3
2 4
7 17
13
20
9
13’ü ara
11
),SEARCH(-TREE 5
),SEARCH(-TREE 4
3
2
or NILL 1
),SEARCH(-TREE
kxright
kxleft
xkeyk
x
xkeykeyx
kx
returnelse
returnthen
if
returnthen
if
)()( hOnT 12
2-Arama (Özyinelemeli)2-Arama (Özyinelemeli)
)()( hOnT
13
2-Arama (İteratif)2-Arama (İteratif)
3- Minimum Bulma3- Minimum Bulma
15
6 18
3
2 4
7 17
13
20
9
Minimum
14
En küçük elemanı içeren düğüm en soldaki düğümde bulunur. Kökten başlayarak devamlı sola gidilerek bulunur
x
xleftx
xleft
x
return
do
while
3
][ 2
NILL ][ 1
)MINIMUM(-TREE
)()( hOnT 15
3- Minimum Bulma3- Minimum Bulma
4- Maksimum Bulma4- Maksimum Bulma
15
6 18
3
2 4
7 17
13
20
9
Maximum
16
En büyük elemanı içeren düğüm en sağdaki düğümde bulunur. Kökten başlayarak devamlı sağa gidilerek bulunur
x
xrightx
xright
x
return
do
while
3
][ 2
NILL ][ 1
)MAXIMUM(-TREE
)()( hOnT 17
4- Maksimum Bulma4- Maksimum Bulma
5- Successor (sonra gelen en küçük)5- Successor (sonra gelen en küçük)
Bir x düğümünün successor’u key[x] değerinden büyük en
küçük değerli düğümdür.
18
15
6 18
3
2 4
7 17
13
20
9
15’in Successor’ı
Durum 1: x düğümünün sağ alt ağacı boş değilse 19
5- Successor (sonra gelen en küçük)5- Successor (sonra gelen en küçük)
15
6 18
3
2 4
7 17
13
20
9
13’ün successor’ı
Durum 2: x düğümünün sağ alt ağacı boş ise 20
5- Successor (sonra gelen en küçük)5- Successor (sonra gelen en küçük)
21
5- Successor (sonra gelen en küçük)5- Successor (sonra gelen en küçük)
y
ypy
yx
yrightxy
xpy
xright
xright
x
return
do
while
returnthen
if
7
][ 6
5
][ and NILL 4
][ 3
])[(MINIMUMTREE 2
NILL ][ 1
)SUCCESSOR(-TREE
15
6 18
3
2 4
7 17
13
20
9
6-Ekleme6-Ekleme
12
5 18
2
13 17
9 15 19
13 elemanını ekleme 22
][ 13
][ 12
][][ 11
empty was Tree ][ 10
NILL 9
][ 8
][ 7
][ 6
][][ 5
4
NILL 3
][ 2
NILL 1
),(INSERTTREE
zyright
zyleft
ykeyzkey
TzTroot
y
yzp
xrightx
xleftx
xkeyzkey
xy
x
Trootx
y
zT
else
then
ifelse
then
if
else
then
if
do
while
)()( hOnT
23
6-Ekleme6-Ekleme
6-Ekleme6-Ekleme12
5 18
2
13 17
9 15 19
24
][ 13
][ 12
][][ 11
empty was Tree ][ 10
NILL 9
][ 8
][ 7
][ 6
][][ 5
4
NILL 3
][ 2
NILL 1
),(INSERTTREE
zyright
zyleft
ykeyzkey
TzTroot
y
yzp
xrightx
xleftx
xkeyzkey
xy
x
Trootx
y
zT
else
then
ifelse
then
if
else
then
if
do
while
7-Silme7-Silme
15
5 16
2
18
12
23
20
13 elemanını silme (z’nin çocuğu olmadığı durum)
10 13 z
5
3
6
7
25
7-Silme7-Silme
15
5 16
2
18
12
23
20
10
5
3
26
6
7
13 elemanını silme (z’nin çocuğu olmadığı durum)
15
5 16 z
2
18
12
23
20
10 13
5
3
27
6
7
16 elemanını silme (z’nin bir çocuğu olduğu durum)
7-Silme7-Silme
15
5
2 12
10 13
5
318 23
20
28
6
7
16 elemanını silme (z’nin bir çocuğu olduğu durum)
7-Silme7-Silme
15
5 16
2
18
12
23
20
10
z 5
3
6 y
7
13
29
7-Silme7-Silme
5 elemanını silme (5’in successor’u 6)(z’nin ikiçocuğu olduğu durum)
15
5 16
2
18
12
23
20
10
z 5
3
6 y
7
30
13
7-Silme7-Silme
5 elemanını silme (z’nin ikiçocuğu olduğu durum)
15
5 16
2
18
12
23
20
10
6
3
7
31
13
7-Silme7-Silme
5 elemanını silme (z’nin ikiçocuğu olduğu durum)
7-Silme7-Silme
17
into data satellite s'copy 16
][][ 15
14
]][[ 13
]][[ 12
]][[ 11
][ 10
NIL][ 9
][][ 8
NIL 7
][ 6
][ 5
NIL][ 4
)SUCCESSOR(-TREE 3
2
NIL][or NIL][ 1
),(DELETETREE
return
then
if
else
then
ifelse
then
if
then
if
else
then
if
else
then
if
zy
ykeyzkey
zy
xypright
xypleft
yplefty
xTroot
yp
ypxp
x
yrightx
yleftx
yleft
zy
zy
zrightzleft
zT
)()( hOnT
32
33
İkili Arama ağacı Uygulamaları• İkili arama ağacı harita, sözlük gibi birçok
uygulamada kullanılır.
– İkili arama ağacı (anahtar, değer) çifti şeklinde kullanılacak sistemler için uygundur.
– Ö.g.: Şehir Bilgi Sistemi• Posta kodu veriliyor , şehir ismi döndürülüyor. (posta
kodu/ Şehir ismi)
– Ö.g.: telefon rehberi• İsim veriliyor telefon numarası veya adres
döndürülüyor. (isim, Adres/Telefon)
– Ö.g.: Sözlük• Kelime veriliyor anlamı döndürülüyor. (kelime, anlam)
34
İkili Arama Ağacı – Sonuç• İki arama ağaç işlemlerinin karmaşıklığı O(h)• Fakat h ağacın derinliğine bağlı.• Örnek: 1 2 3 4 5 6 sayılarını sıralı bir şekilde ekleyelim.
1
2
3
4
5
6
kök • Daha iyisi yapılabilir mi? Ağacımızı dengeli yaparsak evet?
1. AVL-ağaçları2. Splay ağaçları3. Red-Black ağaçları4. B ağaçları, B+ agaçları
• Ortaya çıkan ağaç bağlantılı listeye benzemektedir. Dolayısıyla karmaşıklık O(n) şeklinde olacaktır.