2012-11-01 13 views
7

Ho implementato il seguente codice per stampare un albero di ricerca binario in ordine di livello.Livello di stampa Ordine Formattazione albero di ricerca binaria

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); 
    } 
} 

Sto cercando di capire come migliorare il mio codice per farlo stampare in un determinato formato.

Per fare un esempio, dato un albero

1 
/\ 
    2 3 
//\ 
4 5 6 

Attualmente esso stampa in questo modo:

123456 

Sto cercando per stampare come segue:

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

Sia la funzione 'printLevel' restituisce il numero di nodo come una stringa invece di stamparlo immediatamente. Quindi, puoi concatenare queste stringhe in qualsiasi formato tu voglia. – Aziz

risposta

11

Invece di stampando i valori immediatamente all'interno delle chiamate della funzione ricorsiva, utilizzare le stringhe per mantenere i valori. Questo renderà più facile manipolare l'output.

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 ""; 
} 

uscita:

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

Grazie. Questo ha aiutato molto! – ILostMySpoon

Problemi correlati