Ana içeriğe atla

Binary Search Tree Recursive Java Code



Binary search tree de silme işlemi başka yapılarda oldugu gibi biraz karmaşıktır.

Silme işlemi için adımlarımız

Öncelikle silinecek elemanın adresini buluruz. Sonra 4 durum karşımıza çıkar
1‐Hiçbir çocuk olmama durumu
2‐Sadece sağ çocuğu olma durumu
3‐Sadece sol çocuğu olma durumu
4‐Her iki çocuğu olma durumu

1‐Hiçbir çocuk olmama durumu

Bu durum oldukça basittir.  Algoritma, sileceğimiz eleman yani ebeveyne karşılık gelen sağ ya da solunu NULL olarak ayarlarız ve düğümü çıkarırız.

2‐Sadece sağ çocuğu olma durumu

Bu durumda silinecek sağ çocuğu bir önceki parentı yani ebeveynin sağına bağlarız.

3‐Sadece sol çocuğu olma durumu

Bu durumda silinecek sol çocuğu bir önceki parentı ebeveynin soluna bağlarız.

4‐Her iki çocuğu olma durumu


ilk önce silinecek elemanın sağındaki en küçük elemanı bulur,

sonra bulduğumuz en küçük elemanın bir önceki yani ebeveynini buluruz.

Sonra bulduğumuz sağ taraftaki en küçük eleman ile siliceğimiz elemanın yerine koyarız.

Sonra en küçük elemanı parent nesnesi ile sağdaysa sağ tarafı null yapar yoksa sol taraftaysa solunu null yapar sağdaki en küçük değeri kaldırmış oluruz. Böylece yapıyı bozmadan güzel bir şekilde sileceğimiz elemanı yerleriniz değiştirerek silmiş oluruz.

Binary Search Tree Recursive Kodları

void remove(int in) {
 Node rm = search(in);
 Node pr = searchParent(in, rm);
 if (pr == null)
  return;
 else {
  if ((rm.left == null) && (rm.right == null)) {//hiç cocugu olmayan
   if (pr.left == rm)
    pr.left = null;
   else
    pr.right = null;
  } else if ((rm.left == null) && (rm.right != null)) {//sadece sağ çocugu olan
   pr.right= rm.right;
  } else if ((rm.left != null) && (rm.right == null)) {//sadece sol çocugu olan
   pr.left = rm.left;
  } else {//iki çocugu olan..
   int a = rm.right.searchMin().id;
   Node nd = searchParent(a, rm.right.searchMin());
   rm.id = a;
   if (nd.left.id == a)
    nd.left = null;
   else
    nd.right = null;
   }
  }
 }

Yorumlar

Bu blogdaki popüler yayınlar

WhatsApp Şaka Virüsü

Whatsapp Şaka virüsü ile internetten anlamayan arkadaşlarınıza link atarak eğlenebilirsiniz. Sosyal mühendisliğiniz ne kadar iyiyse inandırıcılıkta artar. Hem android hem ios kullanıcılarında çalışır. Baştan söyleyelim bu virüs değildir. Yine siz bilirsiniz. Bu aralar hacklenmedik sistem kalmadı :D CiftKlik.Net olarak sorumluluk kabul etmiyoruz. Whatsapp api'ları ile ekrana istediğimiz yazıyı yazarak sosyal mühendislik yapıyoruz.

Bütün yazılım dillerinde "Merhaba Dünya" kodları

1)  ASSEMBLY // Ekrana “Merhaba!” yazan örnek program kodu: mov ax,cs mov ds,ax mov ah,9 mov dx, offset Git int 21h xor ax,ax int 21h Git: db "Merhaba!",13,10,"$" 2)  ALGOL (ALGOrithmic Language) // ALGOL 68'e ait, örnek “Merhaba!” kodu: begin print(( "Merhaba!" , newline)) end

İnönü Üniversitesi Bilgisayar Mühendisliği

Mezun oldum İnönü Üniversitesi Bilgisayar Mühendisliğinden yeni mezun olmuş birisi olarak Mühendislik Fakültesi hakkında soru cevap olarak bölüm hakkında bilgi vermiş olacağım. Bilgisayarın bitinden, mimarisine, algoritmasından her şeyine bir fikir sahibi, bu fikirle kodlama yapabilecek seviyeye geldim. Gurbeti yaşadım. Evsiz barksız kalmanın yaşattığı hüznü anladım. Bir selamcık dost kavramını öğrendim. Farklı şehirlerden, farklı kültürden, farklı dilleri konuşan arkadaşlarım oldu.  Dost dediklerimden daha hatır bilen kişilere abilik yaptım, yol gösterecek abiler edindim. Yazılım dünyasından pek çevre yapamasam da güzel insanlar karşıma çıktı. Sınav saatine kadar dışarıda kaldığım zor günler yaşadım. Herkesin kaldığı sınavdan gözü kapalı geçtiğim ;) soru/cevap olmasına rağmen kaldığım sınavlar da oldu. Büyük şirketlerin açıklarını buldum, hala kapatılmadı.