2016-03-29 24 views
1

Ich versuche, meine BST, so dass er druckt, so zu drucken:Drucken binärer Suchbaum Inorder MIt Einzüge

 50, 11 
       45,72 
40,12 
       30,16 
     20,16 
       10,54 

Mein Code tut es nicht, wie Ich mag würde, aber hier ist es:

void AVLTree::printHelp(Node * node) 
    { 
     if (node == 0) { 
      return; 
     } 
     printHelp(node->left); 

     indent = ""; 
     for (size_t i = 1; i < calculateHeight(node); i++) 
     { 
      indent += "  "; 
     } 

     cout << '\n' << indent << node->value; 
     printHelp(node->right); 

    } 
+0

Was die Werte aller Variablen sind? –

+0

Einrückung ist nur ein leerer String, dem ich immer Leerzeichen hinzugefügt habe, um die Ebenen der Knoten anzuzeigen – RookieProgrammer

+0

Was sind übrig, Wert und Knoten? Was macht printHelp()? –

Antwort

1

es mindestens zwei Probleme mit Ihrem Code sind:

  1. den Baum zu sehen, müssen Sie Sie kippen links kopf. Daher sollten Sie rekursiv zunächst das rechts Kind drucken, dann den Knoten, dann das links Kind.

  2. Durch Neuberechnung der Knotenhöhe für die Einrückung werden Sie die Komplexität dieser Operation quadrieren.

versuchen, etwas wie folgt aus:

#include <string> 

void AVLTree::printHelp(const Node *const node, size_t height) 
{ 
    if (node == 0) { 
     return; 
    } 

    printHelp(node->right, height + 1); 
    cout << string(height, ' ') << node->value << endl; 
    printHelp(node->left, height + 1); 
} 

dieser Aufruf mit

printHelp(root, 0); 
+0

Danke für die Antwort! Aber die Ausgabe wird jetzt als eine Reihe von Kästchen mit Fragezeichen in ihnen, gefolgt von dem Knotenwert angezeigt. – RookieProgrammer

+0

@RookieProgrammer True, habe ich die Reihenfolge der Argumente zu "string" verwechselt. Probieren Sie die korrigierte Version. –

+0

Es zeigt nun 50 als Wurzelknoten, dann 30 auf der nächsten Ebene, dann 40 und 20 und dann 45 und 10. Ich fange an, meine Einfügefunktion zu bezweifeln. – RookieProgrammer

Verwandte Themen