Bölüm 5. Ağaç. Olcay Taner Yıldız. O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, / 73

Benzer belgeler
Veri Modelleri. Ağaç Veri Modeli. Ağaç Veri Modeli

Bölüm 6. Karma. Olcay Taner Yıldız. O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, / 31

Bölüm 8. Ayrık Küme. Olcay Taner Yıldız. O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, / 16

BMB204. Veri Yapıları Ders 9. B+ Ağacı, Hash, Heap. Erdinç Uzun NKÜ Çorlu Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü

YZM 2116 Veri Yapıları

Max - Min Heap Tree (Max ve Min Yığıt Ağaçları) Veri Yapıları ve Algoritmalar 2 - Mustafa EGE Ders Notları

AĞAÇ-TREE VERİ YAPISI

AVL Agacı {\} /\ Suhap SAHIN Onur GÖK

BAĞLAÇLI LİSTELER LINKED LISTS

BAĞLAÇLI LİSTELER LINKED LISTS

Arasınav Örnek Soruları Bahar 2018

BIL222 Veri Yapıları ve Algoritmalar

VERİ YAPILARI LİSTELER. Yrd. Doç. Dr. Murat GÖK Bilgisayar Mühendisliği Bölümü YALOVA ÜNİVERSİTESİ

Week 9: Trees 1. TREE KAVRAMI 3. İKİLİ AĞAÇ DİZİLİMİ 4. İKİLİ ARAMA AĞACI 2. İKİLİ AĞAÇ VE SUNUMU > =

YZM 2116 Veri Yapıları

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

AĞAÇLAR. Doç. Dr. Aybars UĞUR

DOSYA ORGANİZASYONU. Ağaç Yapıları ÖZLEM AYDIN TRAKYA ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ

Final Sınavı Örnek Soruları Bahar 2018

YZM 2116 Veri Yapıları

while(), do-while(), for() M.İLKUÇAR 2010 MAKU-MYO

YMT219 VERİ YAPILARI ÖDEV-1

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

AĞAÇLAR TREES. Doç. Dr. Aybars UĞUR

YZM 2116 Veri Yapıları

Yigin & Kuyruk {\} /\ Suhap SAHIN Onur GÖK

Ağaçlar (Trees) Ağaçlar (Trees)

Yrd. Doç. Dr. A. Burak İNNER Bilgisayar Mühendisliği

Algoritma Geliştirme ve Veri Yapıları 9 Ağaç Veri Modeli ve Uygulaması. Mustafa Kemal Üniversitesi

yeni_uye_kayit.ascx UserControl sayfamızda, kaydedilmek istenen üye eğer daha önce veritabanımızda kayıtlı ise bunu buldurup kullanıcıyı uyaralım;

7.Hafta Dengeli Arama Ağaçları (Red - Black Tree)

Bire-bir Sahiplik İlişkisi ile İlgili Sorular:

Final Sınavı Soruları Bahar 2018

GENETİK ALGORİTMA GEZGİN SATICI ÖDEVİ

Soru 1: Fahrenheit cinsinden verilen sıcaklığı Kelvin'e çeviren bir program yazınız. Aşağıdaki dönüşüm formülünü kullanabilirsiniz:

SQL Komutları (2) Uzm. Murat YAZICI

Ağaç (Tree) Veri Modeli

D İ Z İ L E R A R R A Y S

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

Burak Kıymaz JAVA FX

BMÜ-112 ALGORİTMA VE PROGRAMLAMA-II LABORATUARI DENEY-2 FÖYÜ

KUYRUKLAR QUEUES. Doç. Dr. Aybars UĞUR

VERİ YAPILARI DERS NOTLARI BÖLÜM 5 QUEUE (KUYRUK) Yard. Doç. Dr. Deniz KILINÇ

Merge (Bireşim) Algoritmayı önce bir örnek üzerinde açıklayalım.

DÖNGÜLER BMÜ-111 ALGORİTMA VE PROGRAMLAMA-I YRD. DOÇ. DR. İLHAN AYDIN

YZM VERİ YAPILARI DERS#9: HASH FONKSİYONLARI

BIL1202 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ

ASP.NET CLASS KULLANARAK VERİTABANI İŞLEMLERİ

GÜZ DÖNEMİ AKT105 BİLGİSAYAR PROGRAMLAMA DERSİ 4. UYGULAMA

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

BIP116-H14-1 BTP104-H014-1

Kullanıcı tanımlı fonksiyonlar SQL2000 ile gelen özelliklerden biridir. Fonksiyonlar tek bir değer veya tablo döndürmek için kullanılır.

Yrd. Doç. Dr. Caner ÖZCAN

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

GÜZ DÖNEMİ AKT105 BİLGİSAYAR PROGRAMLAMA DERSİ 5. UYGULAMA ERKEKLER İÇİN (BOY-108) BAYANLAR İÇİN (BOY-112)

HACETTEPE ÜNİVERSİTESİ BAHAR DÖNEMİ

2 ALGORİTMA VE AKIŞ DİYAGRAMLARI

Sınav Dağılım & IMKB Endeks

Week 6: Bağlı Liste (Linked List) BAĞLI LİSTE KAVRAMI TEKİL (SINGLE) BAĞLI LİSTE ÇİFT (DOUBLE) BAĞLI LİSTE DAİRESEL (CIRCULAR) BAĞLI LİSTE

YIĞINLAR YIĞINLAR. Yığın İşlemleri Postfix, Prefix, Infix. G. Ü. Bilgisayar Mühendisliği Bölümü

Algoritma Geliştirme ve Veri Yapıları 7 Liste ve Bağlantılı Liste. Mustafa Kemal Üniversitesi

b) Algoritmanızın en kötü durumda işlem zamanını asimptotik olarak bulunuz

Veri Yapıları ve Algoritmalar dönem

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

Algoritma Geliştirme ve Veri Yapıları 2 Veri Modelleri. Mustafa Kemal Üniversitesi

Veri Yapıları. Ağaçlar

Veri Yapıları. Ağaçlar. Ağaçlar genel bilgi

DOSYA ORGANİZASYONU. Sıralı erişimli dosya organizasyonu yöntemleri ÖZLEM AYDIN TRAKYA ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

DÖNGÜLER (LOOPS) while(), do-while(), for(), foreach()

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

Algoritmalar. Heap Sort. Bahar 2017 Doç. Dr. Suat Özdemir 1

YZM ALGORİTMA ANALİZİ VE TASARIM DERS#6: AZALT VE FETHET YÖNTEMİ

Özyineleme (Recursion)

Yrd. Doç. Dr. Caner ÖZCAN

AHMET YESEVİ ÜNİVERSİTESİ BİLİŞİM SİSTEMLERİ VE MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ LİSANS DÖNEM ÖDEVİ

Proje 1. Arayüz Tasarımı

Hafta 12 Karakter Tutan Diziler

Veri Yapıları. Öğr.Gör.Günay TEMÜR Düzce Üniversitesi Teknolojis Fakültesi

BAĞLI LİSTELER BAĞLI LİSTELER

İNTERNET TABANLI PROGRAMLAMA- 9.ders BİLGİLERİN GRIDVIEW İÇERİSİNDE EKLENMESİ, DÜZENLENMESİ VE SİLİNMESİ

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

SAKARYA ÜNİVERSİTESİ BİLGİSAYAR VE BİLİŞİM BİLİMLERİ FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ GÜZ DÖNEMİ PROGRAMLAMAYA GİRİŞ DERSİ

ALGORTMA ve PROGRAMLAMA - II (C# Sürümü) DERS NOTLARI

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 1 DERSİ LAB. ÖDEVİ

Alıştırma 1: Yineleme

İNTERNET TABANLI PROGRAMLAMA- 11.ders FORM UYGULAMASI (DROPDOWN BİLGİ YÜKLEME, VALIDATION KONTROLLERI, PAREMETRELİ KAYIT YAPMA)

YZM 2116 Veri Yapıları

YZM 2116 Veri Yapıları

Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU

BMÜ-111 ALGORİTMA VE PROGRAMLAMA AKIŞ KONTROLÜ YRD. DOÇ. DR. İLHAN AYDIN

İNTERNET TABANLI PROGRAMLAMA- 10.ders GRIDVIEW İÇERİSİNDE YENİ KAYIT EKLEME, FOTOGRAF LİSTELEME, SIRALAMA YAPMA VE DROPDOWN EKLEME

Görsel Programlama 1

Java da İşleçler, Ders #3 (4 Kasım 2009)

Manisa Celal Bayar Üniversitesi Yazılım Mühendisliği Bölümü YZM Veri Yapıları Dersi. Proje#2

«BM364» Veritabanı Uygulamaları

Çok Yollu Ağaçlar (Multi-Way Trees)

Arş.Gör.Muhammet Çağrı Gencer Bilgisayar Mühendisliği KTO Karatay Üniversitesi 2015

İçerik. Java da İşleçler, İşleçler. Aritmetik İşleçler - 1. Aritmetik İşleçler - 2. Geçen ders: Bu ders: BS-515 Nesneye Yönelik Programlama

Transkript:

Bölüm 5. Ağaç Olcay Taner Yıldız 2014 O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 1 / 73

O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 2 / 73

14 düğümden oluşan bir ağaç yapısı 6 3 7 4 9 2 5 17 8 18 12 37 27 28 O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 3 / 73

Tanımlar Ağaçtaki x düğümünden y düğümüne bir ok varsa x düğümüne y düğümünün ebeveyni y düğümüne ise x in çocuğu denir. Bir düğümün çocuk sayısı o düğümün derecesini belirtir. Ağaçtaki bir x düğümünden başlayıp çocukları üzerinden giderek bir y düğümüne ulaşılabiliyorsa, y düğümüne x düğümünün soyu, x düğümüne de y düğümünün atası denir. Ağaçtaki bir düğümün hiç çocuğu yoksa o düğüme yaprak düğüm denir. Bir ağacın derinliği o ağacın kökünden herhangi bir yaprağa ulaşmak için geçtiğimiz elemanların sayısının en fazlasıdır. O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 4 / 73

O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 5 / 73

Altı elemandan oluşan bir ikili arama ağacı 6 3 7 2 5 8 O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 6 / 73

Altı düğümden oluşan bir ağaç. 6 3 9 4 5 12 O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 7 / 73

15 elemandan oluşan 4 derinliğindeki dengeli bir ikili ağaç 8 4 12 2 6 10 14 1 3 5 7 9 11 13 15 O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 8 / 73

Altı elemandan oluşan 4 derinliğindeki bir ikili ağaç yapısı 2 3 7 6 8 O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 9 / 73 5

Tam sayılar içeren düğüm tanımı 1 public class Dugum{ 2 int icerik; 3 Dugum sol; 4 Dugum sag; 5 public Dugum(int icerik){ 6 this.icerik = icerik ; 7 sol = null; 8 sag =null; 9 } 10 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 10 / 73

Tam sayılar içeren ikili arama ağacı tanımı 1 public class Agac{ 2 Dugum kok; 3 public Agac(){ 4 kok =null; 5 } 6 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 11 / 73

O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 12 / 73

Örnek bir ikili arama ağacında 5 i arama. 8 4 12 2 6 10 14 1 3 5 7 9 11 13 15 O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 13 / 73

Verilen bir değeri ikili arama ağacında arayan özyinelemeli algoritma 1 Dugum agacara(int eleman){ 2 if ( icerik == eleman) 3 return this; 4 else 5 if ( icerik > eleman) 6 if (sol!= null) 7 return sol.agacara(eleman); 8 else 9 return null; 10 else 11 if (sag!= null) 12 return sag.agacara(eleman); 13 else 14 return null; 15 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 14 / 73

Verilen bir değeri ikili arama ağacında arayan yinelemesiz algoritma 1 Dugum agacara(int eleman){ 2 Dugum d; 3 d = kok; 4 while (d!=null){ 5 if (d. icerik == eleman) 6 return d; 7 else 8 if (d. icerik > eleman) 9 d = d.sol; 10 else 11 d = d.sag; 12 } 13 return null; 14 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 15 / 73

İkili arama ağacındaki en küçük elemanı arama 8 4 12 2 6 10 14 1 3 5 7 9 11 13 15 O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 16 / 73

Arama ağacındaki en küçük elemanı bulan yinelemesiz algoritma 1 Dugum asgariara(){ 2 Dugum sonuc =this; 3 while (sonuc.sol!=null) 4 sonuc = sonuc.sol; 5 return sonuc; 6 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 17 / 73

Arama ağacındaki en küçük elemanı bulan özyinelemeli algoritma 1 Dugum asgariara(){ 2 if (sol == null) 3 return this; 4 else 5 return sol.asgariara(); 6 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 18 / 73

İkili arama ağacındaki en büyük elemanı arama 8 4 12 2 6 10 14 1 3 5 7 9 11 13 15 O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 19 / 73

Arama ağacındaki en büyük elemanı bulan yinelemesiz algoritma 1 Dugum azamiara(){ 2 Dugum sonuc =this; 3 while (sonuc.sag!=null) 4 sonuc = sonuc.sag; 5 return sonuc; 6 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 20 / 73

Arama ağacındaki en büyük elemanı bulan özyinelemeli algoritma 1 Dugum azamiara(){ 2 if (sag ==null) 3 return this; 4 else 5 return sag.azamiara(); 6 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 21 / 73

Örnek bir ikili arama ağacına 13 elemanının eklenmesi. 12 5 18 2 6 15 19 13 17 O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 22 / 73

Arama ağacına yeni bir eleman ekleyen algoritma 1 void agacaekle(dugum yeni){ 2 Dugum y =null; 3 Dugum x = kok; 4 while (x!=null){ 5 y = x; 6 if (yeni. icerik < x. icerik ) 7 x = x.sol; 8 else 9 x = x.sag; 10 } 11 if (y == null) 12 kok = yeni; 13 else 14 if (yeni. icerik < y. icerik ) 15 y.sol = yeni; 16 else 17 y.sag = yeni; 18 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 23 / 73

Örnek bir ikili arama ağacın kök elemanının silinmesi (1) 12 5 18 2 9 15 19 6 13 17 O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 24 / 73

Örnek bir ikili arama ağacın kök elemanının silinmesi (2) 9 5 18 2 6 15 19 13 17 O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 25 / 73

Arama ağacından bir eleman silen algoritma 1 void agacsil(int icerik){ 2 Dugum y =null, x = kok; 3 while (x.icerik!= icerik ){ 4 if (x. icerik > icerik ) 5 x = x.sol; 6 else 7 x = x.sag; 8 } 9 while (true){ 10 if (x.sol!= null) 11 y = x.sol.azamiara(); 12 if (y ==null && x.sag!=null) 13 y = x.sag.asgariara(); 14 if (y == null) 15 break; 16 x. icerik = y. icerik ; 17 x = y; 18 } 19 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 26 / 73

İkili Arama Arama: O(log N) Ekleme: O(log N) Silme: O(log N) O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 27 / 73

O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 28 / 73

Önce gezinti algoritması 1 void oncegezinti(){ 2 System.out.print( icerik ); 3 if (sol!= null) 4 sol.oncegezinti(); 5 if (sag!= null) 6 sag.oncegezinti(); 7 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 29 / 73

Ara gezinti algoritması 1 void aragezinti(){ 2 if (sol!= null) 3 sol.aragezinti (); 4 System.out.print( icerik ); 5 if (sag!= null) 6 sag.aragezinti(); 7 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 30 / 73

Sonra gezinti algoritması 1 void sonragezinti(){ 2 if (sol!= null) 3 sol.sonragezinti(); 4 if (sag!= null) 5 sag.sonragezinti(); 6 System.out.print( icerik ); 7 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 31 / 73

İkili arama ağacında değişik gezinti algoritmalarının düğümleri ziyaret ediş sıraları O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 32 / 73 Önce Gezinti Ara Gezinti Sonra Gezinti 6 1 3 2 2 3 5 4 7 5 8 6 6 4 3 2 2 1 5 3 7 5 8 6 6 6 3 3 2 1 5 2 7 5 8 4

İçeriği bir ağaç düğümü (alt ağaç) olan eleman yapısı 1 public class Eleman{ 2 Dugum dugum; 3 Eleman ileri ; 4 public Eleman(Dugum dugum){ 5 this.dugum = dugum; 6 ileri = null; 7 } 8 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 33 / 73

Bir ikili arama ağacındaki düğüm sayısını bulan algoritma (Çıkın) (1) 1 int dugumsayisi(){ 2 Dugum d; 3 Eleman e; 4 Cikin c; 5 int sayi = 0; 6 c = new Cikin(); 7 d = kok; 8 if (d!= null){ 9 e = new Eleman(d); 10 c. cikinekle(e); 11 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 34 / 73

Bir ikili arama ağacındaki düğüm sayısını bulan algoritma (Çıkın) (2) 12 while (!c.cikinbos()){ 13 e = c. cikinsil (); 14 d = e.dugum; 15 sayi++; 16 if (d.sol!= null){ 17 e = new Eleman(d.sol); 18 c. cikinekle(e); 19 } 20 if (d.sag!= null){ 21 e = new Eleman(d.sag); 22 c. cikinekle(e); 23 } 24 } 25 return sayi; 26 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 35 / 73

Bir ikili arama ağacındaki düğüm sayısını bulan algoritma (Kuyruk) (1) 1 int dugumsayisi(){ 2 Dugum d; 3 Eleman e; 4 Kuyruk k; 5 int sayi = 0; 6 k = new Kuyruk(); 7 d = kok; 8 if (d!= null){ 9 e = new Eleman(d); 10 k.kuyrugaekle(e); 11 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 36 / 73

Bir ikili arama ağacındaki düğüm sayısını bulan algoritma (Kuyruk) (2) 12 while (!k.kuyrukbos()){ 13 e = k.kuyruksil (); 14 d = e.dugum; 15 sayi++; 16 if (d.sol!= null){ 17 e = new Eleman(d.sol); 18 k.kuyrugaekle(e); 19 } 20 if (d.sag!= null){ 21 e = new Eleman(d.sag); 22 k.kuyrugaekle(e); 23 } 24 } 25 return sayi; 26 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 37 / 73

O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 38 / 73

1 den 7 ye kadar olan sayıların farklı sırada ikili arama ağacına eklenmesiyle oluşan iki değişik ağaç 4 4 2 6 3 5 1 3 5 7 2 6 1 7 O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 39 / 73

İkili arama ağaçları (a) AVL 5 (b) AVL değil 6 2 7 2 7 1 4 6 1 4 3 3 5 O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 40 / 73

Tam sayılar içeren AVL düğümü tanımı 1 public class AvlDugum{ 2 int icerik; 3 int boy; 4 AvlDugum sol; 5 AvlDugum sag; 6 public AvlDugum(int icerik){ 7 this.icerik = icerik ; 8 sol = null; 9 sag =null; 10 boy = 1; 11 } 12 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 41 / 73

AVL ağacı tanımı 1 public class AvlAgac{ 2 AvlDugum kok; 3 public AvlAgac(){ 4 kok =null; 5 } 6 } 7 int boy(avldugum d){ 8 if (d == null) 9 return 0; 10 else 11 return d.boy; 12 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 42 / 73

Durum 1 i çözmek için uygulanan tek rotasyon (a) (b) k 2 k 1 k 1 k 2 C B A B C A O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 43 / 73

Durum 1 i çözmek için uygulanan tek rotasyon algoritması 1 AvlDugum soltekrotasyon(avldugum k2){ 2 AvlDugum k1 = k2.sol; 3 k2.sol = k1.sag; 4 k1.sag = k2; 5 k2.boy = azami(boy(k2.sol), boy(k2.sag)) + 1; 6 k1.boy = azami(boy(k1.sol), k1.sag.boy) + 1; 7 return k1; 8 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 44 / 73

Durum 4 ü çözmek için uygulanan tek rotasyon (a) (b) k 1 k 2 A k 2 k 1 B A B C C O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 45 / 73

Durum 4 ü çözmek için uygulanan tek rotasyon algoritması 1 AvlDugum sagtekrotasyon(avldugum k1){ 2 AvlDugum k2 = k1.sag; 3 k1.sag = k2.sol; 4 k2.sol = k1; 5 k2.boy = azami(k2.sol.boy, boy(k2.sag)) + 1; 6 k1.boy = azami(boy(k1.sol), boy(k1.sag)) + 1; 7 return k2; 8 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 46 / 73

Durum 2 yi çözmek için uygulanan çift rotasyon (a) (b) k 3 k 2 k 1 D k 1 k 3 k 2 A A B C D B C O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 47 / 73

Durum 2 yi çözmek için uygulanan çift rotasyon algoritması 1 AvlDugum solciftrotasyon(avldugum k3){ 2 k3.sol = sagtekrotasyon(k3.sol); 3 return soltekrotasyon(k3); 4 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 48 / 73

Durum 3 ü çözmek için uygulanan çift rotasyon (a) (b) k 1 k 2 A k 3 k 1 k 3 k 2 D A B C D B C O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 49 / 73

Durum 3 ü çözmek için uygulanan çift rotasyon algoritması 1 AvlDugum sagciftrotasyon(avldugum k1){ 2 k1.sag = soltekrotasyon(k1.sag); 3 return sagtekrotasyon(k1); 4 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 50 / 73

AVL ağacına yeni bir eleman ekleyen algoritma (Java) (1) 1 void agacaekle(avldugum yenieleman){ 2 Avldugum y =null, x = kok, t; 3 Eleman e; 4 int yon1 = 0, yon2 = 0; 5 Cikin c = new Cikin(100); 6 while (x!=null){ 7 y = x; 8 e = new Eleman(y); 9 c. cikinekle(e); 10 yon1 = yon2; 11 if (yenieleman.icerik < x. icerik ){ 12 x = x.sol; 13 yon2 = SOL; 14 }else{ 15 x = x.sag; 16 yon2 = SAG; 17 } 18 } 19 cocukyerlestir(y, yenieleman); O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 51 / 73

AVL ağacına yeni bir eleman ekleyen algoritma (Java) (2) 20 while (!c.cikinbos()){ 21 e = c. cikinsil (); 22 x = e.dugum; 23 x.boy = azami(boy(x.sol), boy(x.sag)) + 1; 24 if (Math.abs(boy(x.sol) - boy(x.sag)) == 2){ 25 if (yon1 == SOL && yon2 == SOL) 26 t = soltekrotasyon(x); 27 if (yon1 == SOL && yon2 == SAG) 28 t = solciftrotasyon(x); 29 if (yon1 == SAG && yon2 == SOL) 30 t = sagciftrotasyon(x); 31 if (yon1 == SAG && yon2 == SAG) 32 t = sagtekrotasyon(x); 33 e = c. cikinsil (); 34 y = e.dugum; 35 cocukyerlestir(y, t ); 36 break; 37 } 38 } 39 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 52 / 73

O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 53 / 73

15 veri içeren d= 2 dereceli örnek bir B+ ağacı 11 18 25 32 2 4 6 7 14 15 19 20 25 28 29 34 36 38 42 O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 54 / 73

13 veri içeren d= 1 dereceli örnek bir B+ ağacı 18 32 6 11 20 28 36 2 4 6 7 14 19 25 27 29 30 33 37 39 O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 55 / 73

B+ düğümü tanımı 1 public class BDugum{ 2 int[] K; 3 int m; 4 int d; 5 boolean yaprak; 6 BDugum[] nesil; 7 public BDugum(int d){ 8 m = 0; 9 this.d = d; 10 yaprak =true; 11 K =newint[2 * d + 1]; 12 nesil = new BDugum[2 * d + 1]; 13 } 14 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 56 / 73

B+ ağacı tanımı 1 public class BAgac{ 2 BDugum kok; 3 public BAgac(){ 4 kok =null; 5 } 6 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 57 / 73

Önceki şekildeki B+ ağacında 30 un aranması 18 32 6 11 20 28 36 2 4 6 7 14 19 25 27 29 30 33 37 39 O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 58 / 73

Verilen bir değeri B+ ağacında arayan algoritma 1 BDugum agacara(int eleman){ 2 int cocuk; 3 BDugum b; 4 b = kok; 5 while (!b.yaprak){ 6 cocuk = b.pozisyon(eleman); 7 b = b.nesil [cocuk]; 8 } 9 return b; 10 } 11 int pozisyon(int eleman){ 12 int i; 13 if (eleman >= K[m - 1]) 14 return m; 15 else 16 for (i = 0; i < m; i++) 17 if (eleman < K[i]) 18 return i; 19 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 59 / 73

Önceki şekildeki ağaca 22 nin eklenmesi 11 18 25 32 2 4 6 7 14 15 19 20 22 25 28 29 34 36 38 42 O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 60 / 73

Önceki şekildeki ağaca 22 nin eklenmesi 25 18 32 6 11 20 28 36 2 4 6 7 14 19 22 25 27 29 30 33 37 39 O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 61 / 73

Verilen bir değeri B+ düğümüne ekleyen algoritma (1) 1 BDugum dugumeekle(bagac a,int eleman){ 2 BDugum s, yeni; 3 int cocuk, i; 4 cocuk = pozisyon(eleman); 5 if (! nesil [cocuk].yaprak) 6 s = nesil [cocuk].dugumeekle(a, eleman); 7 else 8 s = nesil [cocuk].yapragaekle(eleman); 9 if (s == null) 10 return null; 11 for (i = m; i > cocuk; i --) 12 K[i ] = K[i - 1]; 13 K[cocuk] = s.k[2 * d]; 14 if (m < 2 * d){ 15 for (i = m + 1; i > cocuk; i --) 16 nesil [ i ] = nesil [ i - 1]; 17 nesil [cocuk] = s; 18 m++; 19 return null; O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 62 / 73

Verilen bir değeri B+ düğümüne ekleyen algoritma (2) 20 } else { 21 yeni = new BDugum(d); 22 for (i = 0; i < d; i++) 23 yeni.k[i ] = K[d + i + 1]; 24 yeni.k[2 * d] = K[d]; 25 for (i = 0; i < d; i++) 26 yeni. nesil [ i ] = nesil [d + i + 1]; 27 yeni.m = d; 28 m = d; 29 if (this == kok){ 30 a.kok = new BDugum(d); 31 a.kok.m = 1; 32 a.kok.nesil [0] = this; 33 a.kok.nesil [1] = yeni; 34 a.kok.k[0] = this.k[d]; 35 return null; 36 } else 37 return yeni; 38 } 39 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 63 / 73

Verilen bir değeri B+ yaprağına ekleyen algoritma 1 BDugum yapragaekle(int eleman){ 2 int i, cocuk; 3 BDugum yeni; 4 cocuk = pozisyon(eleman); 5 for (i = m; i > cocuk; i --) 6 K[i ] = K[i - 1]; 7 K[cocuk] = eleman; 8 if (m < 2 * d){ 9 m++; 10 return null; 11 } else { 12 yeni = new BDugum(d); 13 for (i = 0; i < d + 1; i++) 14 yeni.k[i ] = K[d + i ]; 15 yeni.k[2 * d] = K[d]; 16 yeni.m = d + 1; 17 m = d; 18 return yeni; 19 } 20 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 64 / 73

O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 65 / 73

Veritabanı Öğrenci Sistemi veritabanı Üniversiteye kayıtlı olan lisans, yüksek lisans, doktora vs. tüm öğrencilerin bilgilerini içeren ogrenci tablosunu, Üniversitede ders veren tüm öğretim görevlilerinin bilgilerini içeren gorevli tablosunu, Üniversitede o güne kadar açılmış olan tüm derslerin bilgilerini içeren ders tablosunu, Üniversiteye kayıtlı olan tüm öğrencilerin o güne kadar almış olduğu tüm derslerin notlarını içeren not tablosunu,... içerecektir. O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 66 / 73

Sorgu Numarası 18 olanın ad ve soyadını ogrenci tablosundan SELECT Ad, Soyad FROM Ogrenci WHERE No = 18 sorgusuyla, numarası 23 ten büyük tüm öğrencilerin sayısını ise yine ogrenci tablosundan SELECT Count(*) FROM Ogrenci WHERE No > 23 sorgusuyla öğreniriz. O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 67 / 73

Öğrenci bilgilerini (no, ad, soyad) içeren düğüm yapısı. 1 public class Dugum{ 2 String ad; 3 String soyad; 4 int icerik; 5 Dugum sol; 6 Dugum sag; 7 public Dugum(int no, String ad, String soyad){ 8 this.icerik = no; 9 this.ad = ad; 10 this.soyad = soyad; 11 sol = null; 12 sag =null; 13 } 14 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 68 / 73

Örnek öğrenci bilgileri dosyası 4 21 Oğuz Kerem 18 Aysel Serhat 42 Aysu İpek 26 Ergin Doğan O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 69 / 73

Öğrenci dosyasındaki bilgilerle ikili arama ağacını doldurmak 1 Agac dosyaoku(){ 2 Scanner dosya; 3 Dugum d; 4 String ad; 5 String soyad; 6 int no, yas, i, sayi; 7 Agac agac; 8 dosya =new Scanner(new File("ogrenci.txt")); 9 sayi = dosya.nextint (); 10 agac =new Agac(); 11 for (i = 0; i < sayi; i++){ 12 no = dosya.nextint (); 13 ad = dosya.next(); 14 soyad = dosya.next(); 15 d = new Dugum(no, ad, soyad); 16 agac.agacaekle(d); 17 } 18 return agac; 19 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 70 / 73

Örnek öğrenci dosyasındaki bilgilerle doldurulan ikili arama ağacı 21 Oğuz Kerem 18 Aysel Serhat 42 Aysu İpek 26 Ergin Doğan O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 71 / 73

Numarası 18 olan öğrencinin ad ve soyadını bulan yinelemesiz fonksiyon 1 void sorgu(agac a){ 2 Dugum d; 3 d = a.kok; 4 while (d!=null){ 5 if (d. icerik < 18) 6 d = d.sag; 7 else 8 if (d. icerik > 18) 9 d = d.sol; 10 else{ 11 System.out.print(d.ad); 12 System.out.print(d.soyad); 13 break; 14 } 15 } 16 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 72 / 73

Numarası 23 ten büyük kaç öğrenci olduğunu bulan fonksiyonlar 1 int sorgu2(dugum d){ 2 int sayi = 0; 3 if (d. icerik > 23){ 4 sayi = 1; 5 if (d.sol!= null) 6 sayi += sorgu2(d.sol); 7 } 8 if (d.sag!= null) 9 sayi += sorgu2(d.sag); 10 return sayi; 11 } 12 int sorgu(agac a){ 13 if (a.kok!= null) 14 return sorgu2(a.kok); 15 else 16 return 0; 17 } O. T. Yıldız, C && Java ile Veri Yapılarına, Boğaziçi Üniversitesi Yayınevi, 2013 73 / 73