2012-11-01 12 views
7

Zaimplementowałem następujący kod, aby wydrukować drzewo wyszukiwania binarnego w kolejności poziomej.Drukowanie poziomu poziomu Binarne formatowanie drzewa wyszukiwania

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

Próbuję dowiedzieć się, jak poprawić mój kod, aby wydrukować go w określonym formacie.

Jako przykład podano drzewo

1 
/\ 
    2 3 
//\ 
4 5 6 

Obecnie drukuje to tak:

123456 

szukam go wydrukować w następujący sposób:

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

Niech funkcja 'printLevel' zwraca numer węzła jako ciąg zamiast natychmiast wydrukowaniem. Następnie możesz łączyć te łańcuchy w dowolnym formacie. – Aziz

Odpowiedz

11

Zamiast drukowanie wartości bezpośrednio wewnątrz wywołań funkcji rekurencyjnych, użyj łańcuchów do przechowywania wartości. Ułatwi to manipulowanie wynikami.

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

wyjściowa:

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

Dziękuję. To bardzo pomogło! – ILostMySpoon