sortedset kullanarak dengeli ikili arama ağacı

oy
0

Ben elle unsurları ekleyerek manuel bir ikili arama ağacı oluşturmak için bir kod yazmak mümkün değilim ama ben ... Ben boyutu 1024 rastgele ikili arama ağacı oluşturmak çalışıyorum yardımcı ve elementler rastgele sortedset olması gerekir Lütfen yo unablele m ... o ağaçta bir anahtar bulmaya kullanmak büyüklüğü 1024 rastgele dengeli ikili ağaç üretecek bir kod lütfen lütfen yazma ve önümüzdeki u teşekkür ....

Düzenleme yorumlardan kod eklendi

ya o ödevi ... ve bu ı kodu olarak bugüne kadar ne var:

using System; 
namespace bst { 
    public class Node { 
        public int value; 
        public Node Right = null; 
        public Node Left = null; 

        public Node(int value) 
        { 
            this.value = value; 
        } 
    } 

    public class BST { 
        public Node Root = null; 
        public BST() { }

        public void Add(int new_value) 
        { 
            if(Search(new_value)) 
            {
                Console.WriteLine(value ( + new_value + ) already);
            }
            else
            {
                AddNode(this.Root,new_value);
            }
        }
    }
}
Oluştur 21/01/2011 saat 00:53
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
2

Özyinelemeyi kullanın. Her dal sıralanmamış seti, ortanca orta öğeyi seçin yeni bir şube oluşturur. ağaçtaki geçerli öğenin koy. Başka diziye ortanca içindeki tüm öğeler az Kopya aynı yöntemin çağrısına yeni dizi gönderin. Başka bir diziye ortanca içindeki tüm öğeler daha Kopya, aynı yöntemin çağrısına yeni dizi gönderin. \

Dengeli ağaçlar ana üst düğüm Sen Medyan iki değerleri yinelenen alt dalı veya üst dal üzerinde ait olup olmadığını, varsa karar vermeniz gerekir. Doldurulur değil sürece öğelerin tek bir sayı olması gerekir. Benim örnekte üst dala çiftleri koydu.

Medyan numaralarının eşit miktarda sayıdan daha az ve daha büyük olan bir sayı olacaktır. 1,2,3,3,4,18,29,105,123 Bu durumda, medyan ortalama (veya ortalama) çok daha yüksek olmasına karşın, 4'tür.

Ben ortanca belirleyen kodu yoktu.

BuildTreeItem(TreeItem Item, Array Set)  
{
  Array Smalls;
  Array Larges;
  Median = DetermineMedian(Set);
  Item.Value = Median;
  if(Set.Count() == 1)
    return;  
  for (int i = 0; int i < Set.Count(); i++)
  {
    if(Set[i] < Median)
    {
      Smalls.new(Set[i]);
    }
    else
    {
      Larges.new(Set[i]);
    }
  }
  Item.Lower = new TreeItem;
  Item.Upper = new TreeItem;
  BuildTreeItem(TreeItem.Lower, Smalls);
  BuildTreeItem(TreeItem.Upper, Larges);
}
Cevap 21/01/2011 saat 01:13
kaynak kullanıcı

oy
0

O ödevi olmadığı sürece kolay çözüm, ilk verileri sıralamak ve daha sonra kök olarak orta öğesini kullanarak ve her yarım aşağı inen bir ağaç oluşturmak olacaktır. Xaade önerdiği yöntem benzerdir , ancak çok daha yavaş nedeniyle DetermineMedian karmaşıklığı .

Diğer seçenek aslında (gibi dengeli ağaçlar inşa algoritmalar bakmaktır http://en.wikipedia.org/wiki/Red-black_tree o ihtiyaçlarınızı uygun olup olmadığını görmek için).

DÜZENLEME: Xaade algoritmasının hızı hakkında yanlış açıklama kaldırarak - bu kadar hızlı aslında çabuk tür (n log n - log n özyinelemenin seviyeleri ile özyineleme her katında her elemanını kontrol edin) Ben yavaş tahmin emin değilim neden.

Cevap 21/01/2011 saat 02:42
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more