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

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

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

Ağaç (Tree) Veri Modeli

Veri Yapıları. Ağaçlar

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

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 > =

AĞAÇ-TREE VERİ YAPISI

YZM 2116 Veri Yapıları

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

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ı

BIP116-H14-1 BTP104-H014-1

AĞAÇ (TREE) Veri Modeli

BIL222 Veri Yapıları ve Algoritmalar

Arasınav Örnek Soruları Bahar 2018

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

Final Sınavı Soruları Bahar 2018

Binary Tree nedir?uygulamas nasl yaplr?

Final Sınavı Örnek Soruları Bahar 2018

Ağaç Yapıları (Tree Structures) Kütük Organizasyonu 1

Arasınav Soruları Bahar 2018

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

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

YZM 2116 Veri Yapıları

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

BAĞLAÇLI LİSTELER LINKED LISTS

BAĞLAÇLI LİSTELER LINKED LISTS

Algoritmalar. İkili Arama Ağaçları. Bahar 2016 Doç. Dr. Suat Özdemir 1

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

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

YZM 2116 Veri Yapıları

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

Yrd. Doç. Dr. Ümit ATİLA

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

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

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

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

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-7 Sıralama Algoritmaları

Graflar bilgi parçaları arasındaki ilişkileri gösterirler.

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

Çok Yollu Ağaçlar: B*-Trees B*-Trees

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

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

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İ

Çizgeler (Graphs) Doç. Dr. Aybars UĞUR

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

JAVADA DİZİ İŞLEMLERİ

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

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

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

Programlama Dilleri 3

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

Binary Search. (Yarılama) Bölüm Dizide Bir Öğe Arama

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

DÖNGÜLER BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ LABORATUARI BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA DENEY-4 FÖYÜ GİRİŞ LABORATUARI.

Java ile Nesneye Yönelik Programlama (Object Oriented Programming)

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

BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ LABORATUARI

Yrd. Doç. Dr. Caner ÖZCAN

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ü

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

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

VERİ YAPILARI DERS NOTLARI

KUYRUKLAR. Doç. Dr. Aybars UĞUR

Algoritmalar. Kırmızı Siyah Ağaçları Red Black Trees. Bahar 2017 Doç. Dr. Suat Özdemir 1

ALGORİTMA VE PROGRAMLAMA I

İST 264 VERİ YAPILARI Bitirme Sınavı A Grubu

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

Merge Sort Bireşen Sıralama

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Ü

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

VERİ YAPILARI DERS NOTLARI BÖLÜM 1 GİRİŞ. Yard. Doç. Dr. Deniz KILINÇ

Algoritmalar. Arama Problemi ve Analizi. Bahar 2016 Doç. Dr. Suat Özdemir 1

Yığıtın en üstündeki öğeyi değer olarak alır; ama onu yığıttan almaz, yerinde bırakır.

Görsel Programlama 1

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

ALGORİTMA VE PROGRAMLAMA I

#$% &'#(# Konular. Binary Tree Structures. Binary Search Trees AVL Trees Internal Path Reduction Trees Deerlendirme

YMT219 VERİ YAPILARI ÖDEV-1

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 2116 Veri Yapıları

C# Çalışma Örnekleri

#$% &'#(# Konular. B-Tree and Derivatives. B-Trees B#-Trees B+-Trees Deerlendirme

11- FONKSİYONLAR (FUNCTIONS)

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

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.

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

MAT213 Bilgisayar Programlama I

Çanakkale Onsekiz Mart Üniversitesi. Bilgisayar Mühendisliği Bölümü

VERİ YAPILARI VE PROGRAMLAMA

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

Veri Yapıları Laboratuvarı

Veri Yapıları ve Algoritmalar dönem

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

Java String İşlemleri

Alıştırma 1: Yineleme

DOSYA ORGANİZASYONU. Çarpışma çözümleme yöntemleri ÖZLEM AYDIN TRAKYA ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ

HSancak Nesne Tabanlı Programlama I Ders Notları

Transkript:

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

Giriş Bağlı listeler, yığıtlar ve kuyruklar doğrusal (linear) veri yapılarıdır. Ağaçlar ise doğrusal olmayan belirli niteliklere sahip iki boyutlu veri yapılarıdır (Şekil 1). Ağaçlardaki düğümlerden iki veya daha fazla bağ çıkabilir. İkili ağaçlar (binary trees), düğümlerinde en fazla iki bağ içeren (0,1 veya 2) ağaçlardır. Ağacın en üstteki düğümüne kök (root) adı verilir. Şekil 1 : İkili ağacın grafiksel gösterimleri 5 7 8 9 5 7 8 9 AĞAÇLAR (TREES) 2

AĞAÇ Şekil 9.1'de görülen ağacın düğümlerindeki bilgiler sayılardan oluşmuştur. Her düğümdeki sol ve sağ bağlar yardımı ile diğer düğümlere ulaşılır. Sol (leftptr) ve sağ (rightptr) bağlar boş ("NULL" = "/" = "\") da olabilir. Düğüm yapıları değişik türlerde bilgiler içeren veya birden fazla bilgi içeren ağaçlar da olabilir. Doğadaki ağaçlar köklerinden gelişip göğe doğru yükselirken veri yapılarındaki ağaçlar kökü yukarıda yaprakları aşağıda olacak şekilde çizilirler. Şekil 1 : İkili ağacın grafiksel gösterimleri 5 7 8 9 5 7 8 9 AĞAÇLAR (TREES) 3

Ağaçlarda Düzeyler Şekil 2'deki ağaç, A düğümü kök olmak üzere 9 düğümden oluşmaktadır. Sol alt ağaç B kökü ile başlamakta ve sağ alt ağaç da C kökü ile başlamaktadır. A'dan solda B'ye giden ve sağda C'ye giden iki dal (branch) çıkmaktadır. A Düzey 0 B C Düzey 1 D E F Düzey 2 G H I Düzey 3 Şekil 2 : Ağaçlarda Düzeyler AĞAÇLAR (TREES) 4

Tanımlar - I 1) İkili Ağaç (Binary Tree) : Sonlu düğümler kümesidir. Bu küme boş bir küme olabilir (empty tree). Boş değilse şu kurallara uyar. Kök olarak adlandırılan özel bir düğüm vardır. Her düğüm en fazla iki düğüme bağlıdır. Kök hariç her düğüm bir daldan gelmektedir. Tüm düğümlerden yukarı doğru çıkıldıkça sonuçta köke ulaşılır. 2) Düğüm (node) : Ağacın her bir elemanına düğüm adı verilir. Örnekler : A, B, C. 3) Kök (root) : Düzey 0'daki (şemanın en üstündeki) tek düğüm. Örnek : Şekil 2'de A bilgisini içeren düğüm. 4) Çocuk (child) : Bir düğümün sol ve sağ bağı aracılığı ile bağlandığı düğümler o düğümün çocuklarıdır. Örnek : B ve C, A'nın çocuklarıdır. 5) Parent : Bir düğüm, sağ ve sol bağları ile bağlandığı düğümlerin parent'ıdır. A düğümü, B ve C düğümlerinin parent'ıdır. AĞAÇLAR (TREES) 5

Tanımlar - II 6) Bir düğümün düzey (level) veya derinliği (depth) : Bir düğümün kök düğümden olan uzaklığıdır. Örnek : D düğümünün düzeyi veya derinliği 2'dir. 7) Ağacın derinliği (depth of tree) : En derindeki yaprağın derinliği veya yüksekliği (height). Örnek : Şekil 2'deki ağacın derinliği 3'tür. 8) Yaprak (leaf) : Sol ve sağ bağı boş olan düğümlere yaprak adı verilir. Örnekler : D,G,H,I. 9) Kardeş (sibling, brother) : Aynı parent'a sahip iki düğüme kardeş düğümler adı verilir. Örnekler : B ile C kardeştir. D ile E kardeştir. H ile I kardeştir. 10) Ancestor (üst düğüm) : Bir düğümün parent'ı birinci ancestor'ıdır. Parent'ın parent'ı (recursion) ikinci ancestor'ıdır. Kök, kendi hariç tüm düğümlerin ancestor'ıdır. 11) Descendant (alt düğüm) : Bir düğümün iki çocuğu birinci descendant'larıdır. Onların çocukları da ikinci descendant'larıdır. AĞAÇLAR (TREES) 6

Tanımlar - III 12) Full binary tree : i) Her yaprağı aynı derinlikte olan ii) Yaprak olmayan düğümlerin tümünün iki çocuğu olan ağaç Full (Strictly) Binary Tree'dir. Bir full binary tree'de n tane yaprak varsa bu ağaçta toplam 2n-1 düğüm vardır. 13) Complete binary tree : Full binary tree'de yeni bir derinliğe soldan sağa doğru düğümler eklendiğinde oluşan ağaçlara Complete Binary Tree denilir. Böyle bir ağaçta bazı yapraklar diğerlerinden daha derindir. Bu nedenle full binary tree olmayabilirler. En derin düzeyde düğümler olabildiğince soldadır. 14) General Tree (Ağaç) : Her düğümün en fazla iki çocuğu olabilme sınırı olmayan ağaçlardır. 15) İkili Arama Ağacı (Binary Search Tree) : Boş olan veya her düğümü aşağıdaki şartlara uyan anahtara sahip bir ikili ağaçtır : Kökün solundaki alt ağaçlardaki (eğer varsa) tüm anahtarlar kökteki anahtardan küçüktür. Kökün sağındaki alt ağaçlardaki (eğer varsa) tüm anahtarlar kökteki anahtardan büyüktür. Sol ve sağ alt ağaçlar da ikili arama ağaçlarıdır. AĞAÇLAR (TREES) 7

İkili Ağaçlar ve Üzerlerindeki Dolaşma İşlemleri - I Dolaşma (traverse), ağaç üzerindeki tüm düğümlere uğrayarak gerçekleştirilir. Ağaçlar üzerindeki dolaşma işlemleri, ağaçtaki tüm bilgilerin listelenmesi veya başka amaçlarla yapılır. Doğrusal veri yapılarında baştan sona doğru dolaşmak kolaydır. Ağaçlar ise düğümleri doğrusal olmayan veri yapılarıdır. Bu nedenle farklı algoritmalar uygulanır. Çok bilinen yöntemler üç tane olup özyinelemeden yararlanırlar A PreOrder : ABDGCEHIF Şekil 3 : İkili Ağaçlarda Dolaşma İşlemleri D B E C F InOrder : DGBAHEICF PostOrder : GDBHIEFCA G H I AĞAÇLAR (TREES) 8

İkili Ağaçlar ve Üzerlerindeki Dolaşma İşlemleri- II Preorder (depth-first order) Dolaşma (Traversal) Köke uğra (visit) Sol alt ağacı preorder olarak dolaş. Sağ alt ağacı preorder olarak dolaş. Inorder (Symmetric order) Dolaşma Sol alt ağacı inorder'a göre dolaş Köke uğra (visit) Sağ alt ağacı inorder'a göre dolaş. D B A E C F PreOrder : ABDGCEHIF InOrder : DGBAHEICF PostOrder : GDBHIEFCA Postorder Dolaşma Sol alt ağacı postorder'a göre dolaş Sağ alt ağacı postorder'a göre dolaş. Köke uğra (visit) G H I AĞAÇLAR (TREES) 9

İkili Arama Ağaçları İkili arama ağaçları, her bir düğümün solundaki (sol alt ağacındaki) tüm düğümler kendisinden küçük, sağındakiler (sağ alt ağacındakiler) de kendisinden büyük olacak şekilde oluşturulurlar (Şekil 4). İkili arama ağaçlarındaki en önemli işlemlerden birisi aramadır. Örnek olarak aşağıdaki ağaçta, 44 sayısını aratmak için şu işlem sırası izlenir : Karşılaştırma 1 : 44, 47 ile karşılaştırılır. 44<47 olduğundan sol bağdan ilerlenir. Karşılaştırma 2 : 44, 25 ile karşılaştırılır. 44>25 olduğundan sağ bağdan ilerlenir. Karşılaştırma 3 : 44, 43 ile karşılaştırılır. 44>43 olduğundan sağ bağdan ilerlenir. Karşılaştırma 4 : 44 == 44. Aranan anahtar değeri ağaçta bulundu! Şekil 4 : İkili Arama Ağacı AĞAÇLAR (TREES) 10

İkili Arama Ağacında Arama Örnek olarak aşağıdaki ağaçta, 90 sayısını aratmak için şu işlem sırası izlenir : Karşılaştırma 1 : 90, 47 ile karşılaştırılır. 90>47 olduğundan sağ bağdan ilerlenir. Karşılaştırma 2 : 90, 77 ile karşılaştırılır. 90>77 olduğundan sağ bağdan ilerlenir. Karşılaştırma 3 : 90, 93 ile karşılaştırılır. 90<93 olduğundan sol bağdan ilerlenir. : NULL. Aranan anahtar değeri ağaçta bulunamadı. AĞAÇLAR (TREES) 11

İkili Arama Ağaçlarında Dolaşma İkili ağaçlardaki dolaşma işlemlerinin tümü ikili arama ağaçlarında da kullanılır. İkili arama ağaçları üzerinde inorder dolaşıldığında tüm elemanlar küçükten büyüğe sıralı bir şekilde karşımıza gelecektir. AĞAÇLAR (TREES) 12

İkili Arama Ağacının Derinliği Görüldüğü gibi arama işleminin etkinliği ağacın yüksekliğine bağlıdır. İkili arama ağaçları dengeli tutulabilirse, bir anahtar değerini aramada oldukça hızlıdırlar. Böyle olduğunda n elemanlı bir ağaç en fazla log 2 n düzeyden oluşur. Bir değerin bulunması veya ağaçta olmadığının belirlenmesi için en fazla log 2 n karşılaştırma yapılır. Örnek olarak 1000 elemanlı bir ikili arama ağacında bir elemanın bulunabilmesi için en fazla 10 karşılaştırma yapmak gerekecektir (2 10 =1024 > 1000). Bağlı listelerde ise bulunacak elemanın değerine göre (eleman sonda ise) 1000 karşılaştırma yapmak gerekebilir. Düğüm sayısı n olan Complete Binary Tree'de derinliği hesaplayabiliriz: n = 2 0 + 2 1 + 2 2 +... + 2 d = 2 d+1-1 => n+1 = 2 d +1 => d = log 2 (n+1) - 1'dir. Örnek: 15 düğümlü bir ağaçta d = log 2 (15+1) - 1 = 4-1 = 3'tür. AĞAÇLAR (TREES) 13

İkili Arama Ağaçlarına Ekleme İkili arama ağaçlarının oluşturulması şu şekildedir : Herhangi sıralı olmayan bir sayı dizisi gelirken her bir eleman ağaca bir yaprak düğüm olarak eklenir. Örnek olarak sıra ile, 47, 25, 43, 77, 65, 68, 93, 11, 17, 44, 31, 7 sayıları ağaca eklenmek istenirse: 47 : 47 köke eklenir. 25 : 25<47, 47'nin soluna eklenir. 43 : 43<47, 43>25, 25'in sağına eklenir. 77 : 77>47, 47'nin sağına eklenir. 65 : 65>47, 65<77, 77'nin sol bağına eklenir. (Ağacı tamamlayınız...)....... AĞAÇLAR (TREES) 14

İkili Arama Ağaçlarındaki Diğer İşlemler İkili arama ağaçları, tekrarları önlemek açısından da oldukça yararlıdırlar. Ağaç oluşturulurken tekrar eden bir eleman eklenmek istendiğinde, kökten itibaren sola git, sağa git kararları ile o değerin olduğu yere hızlıca ulaşılacak ve ağaçta (veriler içinde) o değerin zaten olduğu anlaşılacaktır. Bu şekilde tekrar eden verilerin olması engellenir. Bunlar dışında ikili arama ağacından düğüm silme, ikili arama ağacını iki boyutlu ağaç biçiminde ekrana çizdirme, ağacı düzey sırasında dolaşma (düzey düzey soldan sağa) gibi algoritmalar da yazılabilir. Ayrıca ağaç düzeyini bulma, ağaca string de dahil birçok bilgi ekleme gibi işlemler de yapılabilir. AĞAÇLAR (TREES) 15

İkili Arama Ağacı Oluşturmayı ve Dolaşmayı Sağlayan C# Programı // Düğüm Sınıfı class TreeNode public int data; public TreeNode leftchild; public TreeNode rightchild; public void displaynode() Console.Write(" "+data+" "); leftchild Bir Ağaç Düğümü Bir Ağaç Düğümü data 5 rightchild Bir Ağaç Düğümü 1) Düğüm Sınıfı AĞAÇLAR (TREES) 16

İkili Arama Ağacı Oluşturmayı ve Dolaşmayı Sağlayan C# Programı // Ağaç Sınıfı class Tree private TreeNode root; public int sayi; public Tree() root = null; public TreeNode getroot() return root; // Agacın inorder Dolasılması public void inorder(treenode localroot) if (localroot!= null) inorder(localroot.leftchild); localroot.displaynode(); inorder(localroot.rightchild); // Ağacın preorder Dolasılması public void preorder(treenode localroot) if (localroot!= null) localroot.displaynode(); preorder(localroot.leftchild); preorder(localroot.rightchild); 2) Ağaç Sınıfı - 1 // Agacın postorder Dolasılması public void postorder(treenode localroot) if (localroot!= null) postorder(localroot.leftchild); postorder(localroot.rightchild); localroot.displaynode(); AĞAÇLAR (TREES) 17

İkili Arama Ağacı Oluşturmayı ve Dolaşmayı Sağlayan C# Programı // Ağaca bir düğüm eklemeyi sağlayan metot public void insert(int newdata) TreeNode newnode = new TreeNode(); newnode.data = newdata; if (root == null) root = newnode; else TreeNode current = root; TreeNode parent; // Buraya sağ sütundaki kodu yazınız // end else not root // end insert() // class Tree 2) Ağaç Sınıfı - 2 while (true) parent = current; if (newdata < current.data) current = current.leftchild; if (current == null) parent.leftchild = newnode; return; else current = current.rightchild; if (current == null) parent.rightchild = newnode; return; // end while AĞAÇLAR (TREES) 18

İkili Arama Ağacı Oluşturmayı ve Dolaşmayı Sağlayan C# Programı class TreeTest // Agaca 10 tane sayı yerlestirilmesi static Random r = new Random(); static void Main(string[] args) Tree agac = new Tree(); Console.WriteLine("Sayılar : "); for (int i=0;i<10;++i) int sayi = (int) (r.next(100)); Console.Write(sayi+" "); agac.insert(sayi); ; BinTree Test sınıfı Ekran Çıktısı : Sayılar : 21 80 23 69 41 11 57 56 64 66 Agacın InOrder Dolasılması : 11 21 23 41 56 57 64 66 69 80 Agacın PreOrder Dolasılması : 21 11 80 23 69 41 57 56 64 66 Agacın PostOrder Dolasılması : 11 56 66 64 57 41 69 23 80 21 Console.Write("\nAgacın InOrder Dolasılması : "); agac.inorder(agac.getroot()); Console.Write("\nAgacın PreOrder Dolasılması : "); agac.preorder(agac.getroot()); Console.Write("\nAgacın PostOrder Dolasılması : "); agac.postorder(agac.getroot()); AĞAÇLAR (TREES) 19

İkili Arama Ağacı Oluşturmayı ve Dolaşmayı Sağlayan Java Programı class TreeNode public int data; public TreeNode leftchild; public TreeNode rightchild; leftchild Bir Ağaç Düğümü Data 5 rightchild public void displaynode() System.out.print(" "+data+" "); Bir Ağaç Düğümü Bir Ağaç Düğümü 1) Düğüm Sınıfı AĞAÇLAR (TREES) 20

İkili Arama Ağacı Oluşturmayı ve Dolaşmayı Sağlayan Java Programı class Tree private TreeNode root; public Tree() root = null; public TreeNode getroot() return root; // Ağacın preorder Dolaşılması public void preorder(treenode localroot) if(localroot!=null) localroot.displaynode(); preorder(localroot.leftchild); preorder(localroot.rightchild); 2) Ağaç Sınıfı - 1 // Ağacın inorder Dolaşılması public void inorder(treenode localroot) if(localroot!=null) inorder(localroot.leftchild); localroot.displaynode(); inorder(localroot.rightchild); // Ağacın postorder Dolaşılması public void postorder(treenode localroot) if(localroot!=null) postorder(localroot.leftchild); postorder(localroot.rightchild); localroot.displaynode(); AĞAÇLAR (TREES) 21

İkili Arama Ağacı Oluşturmayı ve Dolaşmayı Sağlayan Java Programı // Ağaca bir düğüm eklemeyi sağlayan metot public void insert(int newdata) TreeNode newnode = new TreeNode(); newnode.data = newdata; if(root==null) root = newnode; else TreeNode current = root; TreeNode parent; // Buraya sağ sütundaki kodu yazınız // end else not root // end insert() // class Tree 2) Ağaç Sınıfı - 2 while(true) parent = current; if(newdata<current.data) current = current.leftchild; if(current==null) parent.leftchild=newnode; return; else current = current.rightchild; if(current==null) parent.rightchild=newnode; return; // end while AĞAÇLAR (TREES) 22

İkili Arama Ağacı Oluşturmayı ve Dolaşmayı Sağlayan Java Programı class BinTree public static void main(string args[]) Tree thetree = new Tree(); // Ağaca 10 tane sayı yerleştirilmesi System.out.println("Sayılar : "); for (int i=0;i<10;++i) int sayi = (int) (Math.random()*100); System.out.print(sayi+" "); thetree.insert(sayi); ; BinTree Test sınıfı System.out.print("\nAğacın InOrder Dolaşılması : "); thetree.inorder(thetree.getroot()); System.out.print("\nAğacın PreOrder Dolaşılması : "); thetree.preorder(thetree.getroot()); System.out.print("\nAğacın PostOrder Dolaşılması : "); thetree.postorder(thetree.getroot()); Ekran Çıktısı Sayılar : 92 15 62 72 23 58 32 42 39 59 Ağacın InOrder Dolaşılması : 15 23 32 39 42 58 59 62 72 92 Ağacın PreOrder Dolaşılması : 92 15 62 23 58 32 42 39 59 72 Ağacın PostOrder Dolaşılması : 39 42 32 59 58 23 72 62 15 92 AĞAÇLAR (TREES) 23

Ağaçlarda Eleman Silme? AĞAÇLAR (TREES) 24