2016-04-11 29 views
0

Şu anda RBTrees bir proje üzerinde çalışıyorum. Ağaçtaki tüm anahtarları içeren sıralanmış bir diziyi döndürmesi gereken bir yöntemle ilgili bir sorunum var. iç içe geçmiş yöntemleri kullanmak istedim, böylece iç yöntem diziyi güncelleyebilir, ancak google'da hızlı bir arama bana bunu yapamadığımı gösterdi. Herhangi bir alternatif? khelwood olarakİç içe geçmiş yöntemler için alternatif, java

public int[] keysToArray() { 
    if(this.root==null){ 
     return (new int[0]); 
    } 
    int[] arr = new int[this.size()]; 
    public int ins_arr(RBNode p, int index){ 
     if(p==RBNode.nul){ 
      return index; 
     } 
     int so_far = ins_arr(p.getLeft(),index); 
     arr[so_far]=p.getKey(); 
     int so_far2 = ins_arr(p.getRight(),so_far+1); 
     return so_far2; 
    } 
    ins_arr(this.root,0); 
    return arr; 
} 
+1

siz "iç içe yöntemleri" ile neyi kastediyorsunuz? Java'da yöntemleri yuvalayamazsınız. Tam olarak ne yapmaya çalıştığınız bunun için ek bir yönteme ihtiyacınız var? – Stultuske

+1

Yöntem tanımınızı diğer yöntem tanımının dışına taşıyabilir ve 'arr 'dizisini parametre olarak alabilirsiniz. – khelwood

cevap

0

üst sınıfında hareket yöntemini önerdi ve parametre olarak Array arr ekleyin: Aşağıdaki benim kodudur. Bu (denenmemiş) gibi: yanıltıcı olabilir ham dizisi ile çalışma

public int[] keysToArray() { 
    if(this.root==null){ 
     return (new int[0]); 
    } 
    int[] arr = new int[this.size()]; 
    ins_arr(arr, this.root,0); 
    return arr; 
} 

public int ins_arr(int[] arr, RBNode p, int index){ 
    if(p==RBNode.nul){ 
     return index; 
    } 
    int so_far = ins_arr(arr, p.getLeft(),index); 
    arr[so_far]=p.getKey(); 
    int so_far2 = ins_arr(arr, p.getRight(),so_far+1); 
    return so_far2; 
} 
0

, neden insert yapar ve dizi için bir alıcı olan bir sınıfta sar değil. Onu yuvalanmış bir sınıf yapabilirsin.

class KeyCollector { 

    private int[] arr; 

    public KeyCollector(int size) { 
     arr = new int[size]; 
    } 

    public int ins_arr(RBNode p, int index){ 
     if(p==RBNode.nul){ 
      return index; 
     } 
     int so_far = ins_arr(p.getLeft(),index); 
     arr[so_far]=p.getKey(); 
     int so_far2 = ins_arr(p.getRight(),so_far+1); 
     return so_far2; 
    } 

    public int[] getarray() { 
     return arr; 
    } 
} 

Sonra yöntemdir:

public int[] keysToArray() { 
    if(this.root==null){ 
     return (new int[0]); 
    } 
    KeyCollector arr = new KeyCollector(this.size()); 

    arr.ins_arr(this.root,0); 
    return arr.getArray(); 
} 
İlgili konular