2016-06-02 14 views
-1

Ich habe eine Funktion, an die ich eine Knotenstruktur übergebe. Die Funktion soll den Knotenbaum in dieser Form drucken:Wie verwende ich eine rekursive Funktion, um einen Knotenbaum zu drucken?

root 
node 
    node 
    node 
node 
node 
    node 
    node 
node 

Ich kann nicht meinen Kopf herum zu wickeln scheinen, wie es geht. Das ist, was ich bisher habe:

void IterateTree(Node &rNode) 
{ 
    printf("\t\n"); 
    std::cout << rNode.Name() << std::endl; 

    int i = 0; 
    for (std::list<Node>::iterator it = rNode.childs.begin(); it != rNode.childs.end(); ++it) 
    { 
     printf("%d: ", i); 
     IterateTree(*it); 
     printf("\b"); 
     i++; 
    } 
} 

Meine Frage ist: Gibt es eine Standardmethode von Iterieren und Drucken eines Knotenbaum mit der korrekten Einzug?

+1

es sieht gut aus, fügen Sie einfach einen weiteren Parameter 'Tiefe', so dass Sie wissen, wie viel die Kinder einrücken – softwarenewbie7331

Antwort

1

andere Parameter die ‚Tiefe‘ der Rekursion

void IterateTree(Node &rNode , int depth) 
{ 
    printf("\t\n"); 
    std::cout << rNode.Name() << std::endl; 

    int i = 0; 
    for (std::list<Node>::iterator it = rNode.childs.begin(); it != rNode.childs.end(); ++it) 
    { 
     for(int j=0; j<depth; j++){printf(" ");} 
     printf("%d: ", i); 
     IterateTree(*it, depth+1); 
     printf("\b"); 
     i++; 
    } 
} 

Meine Antwort ist zu verfolgen: nur wenige Menschen Druck Bäume, vor allem nicht im Klartext, so gibt es keinen Standard für die Vertiefung.

0

Ich habe es nicht getestet, aber meine erste Vermutung wäre etw. wie folgt:

void iterateTree(Node &node, int level = 0){ 
    for(int i = 0; i < level; i++) printf("\t"); //foreach level print a tab 

    cout << rNode.Name() << endl; //output the node 

    int i = 0; 
    level += 1; //if the for runs there is a next level 
    for(list<Node>::iterator it = r.Node.childs.begin(); it != rNode.childs.end(); ++it){ 
     iterateTree(it, level); 
    } 
}