Binary Search Tree (BST) Yapısı & Java’da Uygulanışı

İkili arama ağacı ( Binary Search Tree ) ‘yi özellikle Data structures ( veri yapıları ) ile uğraşıyorsanız duymuşsunuzdur. Sıralama ağaçlarının temelini oluşturuyor diyebiliriz.

Kısaca çalışma şeklini anlatayım; sıfırdan sayıları ağaç’a ekliyorsanız, ilk eklenen ağacın root’ elemanı olacaktır. Bir sonraki eklenen elemanlar ise bu ağaçtaki rootlara göre sağa ve sola eklenecektir. Diğer eklenen elemanlarda sağ sol kayarak doldurabileceği boş alana eklenir.

Örnekleyelim; sayıları sırayla ekleyelim : 10, 6, 11, 15, 13

ilk eklenen sayımız 10 ; root’u muzu belirledik.

Binary Search Tree (BST) Yapısı & Java'da Uygulanışı

ikinci sayımız 6; 10dan küçük, ağacın sol tarafına ekleniyor.

Binary Search Tree (BST) Yapısı & Java'da Uygulanışı

üçüncü sayımız 11; 10dan büyük, ağacın sağ tarafına ekleniyor.

Binary Search Tree (BST) Yapısı & Java'da Uygulanışı

dördüncü sayımız 15;  10dan büyük, daha sonra 11 var; 11 den büyük 11in sağına eklenir.

Binary Search Tree (BST) Yapısı & Java'da Uygulanışı

beşinci sayımız 13 ;  10dan büyük, daha sonra 11 var; 11 den büyük 11in sağına kayar, 15 var, 15 ten küçük onun soluna eklenir.

Binary Search Tree (BST) Yapısı & Java'da Uygulanışı

Bu şekilde devam ederek ikili arama ağacımız şekillenir.

BST Ağacın en küçük elemanını bulmak için; sürekli sol tarafa giderek gezersek ağacı hızlı bir şekilde en küçük elamanı elde ederiz.

BST Aynı şekilde ağacın en büyük elemanını bulmak için; sürekli sağ tarafa giderek ağacı gezersek en büyük elemanı buluruz.

Binary Search Tree Running Time ( Çalışma süresi )

Worst case : O(n)
Binary Search Tree Java kodları ( Java implementatiton )

BST.java

// Binary Search Tree
public class BST {
private Node root;
private class Node
{
private Node parent;
private Node left;
private Node right;
private int data;

Node(int k)
{
left = right = null;
data = k;
}
}

public void insert(int k)
{
Node n = new Node(k);
insert(root,n);
}

private void insert(Node r, Node n)
{
if(root == null) root = n;
else{
if(r.data > n.data) // sola
{
if(r.left == null) // en sola geldik
{
r.left = n;
n.parent = r.left;
}
else insert(r.left,n); // en sola gitmek için fonksiyonumuzu recursive olarak çağırıyoruz
}
else
{ // sağa
if(r.right == null) // en sağa geldik
{
r.right = n;
n.parent = r.right;
}
else insert(r.right,n); // en sağa gitmek için fonksiyonumuzu recursive olarak çağırıyoruz
}
}
}

public void search(int k)
{
boolean control = search(root, k);
if(control) System.out.println("Bulundu");
else System.out.println("Bulunamadı");
}

private boolean search(Node r, int k)
{
if( r != null)
{
if(r.data == k) return true;
else if(r.data > k) search(r.left,k);
else if(r.data < k) search(r.right,k);
}
return false;
}

public void max()
{
System.out.println(max(root));
}
// en büyük değer için ağacın en sağına gideriz
private int max(Node r)
{
if(r!=null)
{
max(r.right);
}
return r.data;
}

public void min()
{
System.out.println(min(root));
}
// en küçük değer için ağacın en soluna gideriz
private int min(Node r)
{
if(r!=null)
{
min(r.left);
}
return r.data;
}

public void print(Node r)
{
if( r != null )
{
print(r.left);
System.out.print(r.data + " ");
print(r.right);
}
}
}

main.java

class main{

public static void main (String[] args)
{
BST tree = new BST();
tree.insert(10);
tree.insert(11);
tree.insert(7);
tree.insert(5);
tree.print(tree.root);
tree.search(11);

}

}

1 thought on “Binary Search Tree (BST) Yapısı & Java’da Uygulanışı

  1. Faruk

    Merhabalar, Öncelikle paylaşımlarınız için teşekkürler, Türkçe olarak malum kaynak kısıtlılığını da göz önüne aldığımız zaman , gerçekten takdire şayan bir iş yapıyorsunuz 🙂

    Bu kodlamanızda search kısmında bir sıkıntı çıkıyor her türlü verilen sayı bulunamadı olarak çıkıyor ki örneğinizde ki 11 sayısı da bulunamadı olarak çıktı veriyor. Birkaç düzeltme yaptım sorunu ortadan kaldırdım kodu şöyle paylaşıyorum düzeltmek istiyorsanız uğraşmayın diye 🙂

    public void search(int k)
    {
    search(root, k);

    }

    private void search(Node r, int k) {

    if(r != null) {
    int x = r.data;
    if(x == k) {

    System.out.println(“bulundu”);

    }else if( x k) {
    search(r.left,k);
    }

    }if (r == null) {
    System.out.println(“Bulunamadı”);
    }

    }

    Reply

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir