2012-11-01 46 views
7

Bir ikili arama ağacını düzey sırasına göre yazdırmak için aşağıdaki kodu uygulamıyorum.Yazdırma Düzeni Sırası İkili Arama Ağacı Biçimlendirme

public void printLevelOrder(int depth) { 
    for (int i = 1; i <= depth; i++) { 
     printLevel(root, i); 
    } 
} 

public void printLevel(BinaryNode<AnyType> t, int level) { 
    if (t == null) { 
     return; 
    } 
    if (level == 1) { 
     System.out.print(t.element); 
    } else if (level > 1) { 
     printLevel(t.left, level - 1); 
     printLevel(t.right, level - 1); 
    } 
} 

Kodumu, belirli bir biçimde yazdırılmasını sağlamak için nasıl geliştireceğimi anlamaya çalışıyorum. Ben şöyle yazdırmaya arıyorum

123456 

: Bir ağaç verilen Örnek olarak

,

1 
/\ 
    2 3 
//\ 
4 5 6 

Şu anda şöyle yazdırır

Level 0: 1 
Level 1: 2 3 
Level 2: 4 5 6 
+0

fonksiyonu 'printLevel' yerine hemen yazdırmadan bir dizi olarak düğüm sayısı ile döner olsun. Ardından, bu dizeleri istediğiniz herhangi bir biçimde birleştirebilirsiniz. – Aziz

cevap

11

yerine özyinelemeli işlev çağrılarının içindeki değerleri hemen yazdırmak, değerleri tutmak için dizeleri kullanın. Bu, çıkışı manipüle etmeyi kolaylaştıracaktır.

public void printLevelOrder(int depth) { 
    for (int i = 1; i <= depth; i++) { 
     System.out.print("Level " + (i-1) + ": "); 
     String levelNodes = printLevel(root, i); 
     System.out.print(levelNodes + "\n"); 
    } 
} 

public String printLevel(BinaryNode<AnyType> t, int level) { 
    if (t == null) { 
     return ""; 
    } 
    if (level == 1) { 
     return t.element + " "; 
    } else if (level > 1) { 
     String leftStr = printLevel(t.left, level - 1); 
     String rightStr = printLevel(t.right, level - 1); 
     return leftStr + rightStr; 
    } 
    else // you need this to get it to compile 
     return ""; 
} 

Çıkış:

Level 0: 1 
Level 1: 2 3 
Level 2: 4 5 6 
+0

Teşekkürler. Bu çok yardımcı oldu! – ILostMySpoon

İlgili konular