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

Popüler Bloglar

Link tl reklam geçme

Link.Tl reklamı beklemeden geçmek! Link.tl de reklamlarla uğraşmadan javascript kod ile reklamı beklemeden bypass edip geçebilirsiniz. javascript : ciftklik = "http://link.tl/i" ; + document .location.pathname; window .location.href = ciftklik; Kodu Kopyala Tek yapmanız gereken yukarıdaki kodu yer imlerine eklemek. Daha sonra geçmek istediğiniz reklam da çalıştırmak. Link Geçme sitesi   online Videolu anlatım  Etiket bulutu: link tl atlama, link tl çevirici, link tl çeviri, link tl çözücü, link tl çalışan bot, link tl engelleme, link tl geçme, link tl geçici, link tl geçme sitesi, link tl hile, link tl hack, link tl hileleri, link tl link kısaltma, link tl link açma, link tl link çevirici, link tl script,link tl geçme, link tl geçici, link tl geçme sitesi, link tl geçilmiyor, link tl geçmiyor, link.tl geçemiyorum, link tl geç, link tl geçme 2017, link tl nasıl geçilir, link.tl otomatik geçme,link tl geçme 2018

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.

Firebase (JS) ile Gerçek Zamanlı Veri Tabanı

Javascript Firebase Web Kullanımı Bu yazı, web uygulamaları arasındaki iletişim için Firebase 'in Javascript ile Gerçek Zamanlı Veritabanını ( Real Time Database)  anlatan Türkçe dökümantasyondur.  Gerçek Zamanlı Veritabanı , istemciler ve sunucu arasındaki iletişim için Websockets kullanır. Firebase Nedir , Özellikleri? JSON formatı ile verilerimizi  gerçek zamanlı olarak depolayabildiğimiz, anlık olarak değişiklikleri görebildiğimiz websocket apisidir.  Cloud Firestore, Cloud Functions,Authentication, Hosting, Cloud Storage ,Realtime Database... WebSocket ve Real time Nedir? WebSocket, tek bir TCP bağlantısı üzerinden iki yönlü iletişim kanalı sağlayan bir iletişim protokolüdür. WebSocket protokolü, sunucuya ve sunucudan gerçek zamanlı veri aktarımını sağlayarak, tarayıcı ile web sunucusu arasında etkileşimi sağlamaktadır. Bu, sunucunun istemci istemeden tarayıcıya içerik gönderebileceği ve bağlantıyı açık tutarak istediği zaman mesaj alabilmesini veya gön

Sesiniz Taklit Edilebilir : Google Dublex, Lyrebird

Text To Speech Teknolojisi  Google Dublex, Lyrebird, VoCo Google I/O etkinliği sırasında Google Assistant 'ın yeni özelliği Duplex tanıtıldı. Yapay zeka tabanlı konuşma teknolojisi ile sesinizi taklit ettirebilir. Telefon görüşmelerinizi,randevularınızı ona yaptırabilirsiniz. Belkide ilerde şarkı söyletebilir, şiir okutabilirsiniz. Aklınıza ne gelirse. 

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