2016-07-22 20 views
0

ich gerade sah ich zu anmerken, bereits diesen Beitrag vor meiner Frage: C How to "draw" a Binary Tree to the consoleeinen binären Baum Zeichnung in c zu trösten

Lassen Sie uns sagen, dass ich den folgenden Baum haben. Wenn meine Druckfunktion nur die Zahlen drucken würde (in der Reihenfolge der Traversierung), würde ich Folgendes ausgedruckt haben: 1,3,4,6,7,8,10,13,14.

Was wäre der beste Ansatz, um den Baum wie etwas darunter zu zeichnen, wenn man bedenkt, dass der Baum in dieser Reihenfolge gedruckt wird?

Ich fühle, dass, wenn 8 zuerst gedruckt wurde gefolgt von 3,10 etc .. es wäre einfacher, aber da es in Reihenfolge ist Traversal 1 wird zuerst gedruckt, die die erste Druckanweisung an der Spitze wäre.

enter image description here

+0

In-Order-Traversal (in der Zeile oben aufgeführt) – FreeStyle4

+0

Richtig, so wollen Sie wissen, wie man ein Traversal des Baumes zu tun. Versuchen Sie, nach "binary tree in order traversal" zu suchen. Dafür gibt es viele bestehende Anleitungen innerhalb und außerhalb von SO. – kaylum

Antwort

0

ich dies für einige Kurs vor ca. 2 Jahren getan hat ...

ich einen Knoten Struktur geschaffen, die ihre eigenen Daten und 2 Knoten enthalten ist, eine linke und eine rechte, es sah aus wie diese (ich konnte nicht den endgültigen Code finden, die möglicherweise gemeinsam genutzte Zeiger verwendet haben):

struct node 
{ 
    int data; 
    node *left; 
    node *right; 
}; 

ich habe dann mein Baum durch mehrere Knoten ihm hinzufügen Rekursion wie folgt:

void insert(node **tree, int value) 
{ 
    if (*tree == nullptr) 
    { 
     *tree = new node; 
     (*tree)->data = value; 
     (*tree)->left = nullptr; 
     (*tree)->right = nullptr; 
    } 
    else if (value < (*tree)->data) 
    { 
     insert(&((*tree)->left), value);//memory location of the pointer to the node of the node 
    } 
    else if (value > (*tree)->data) 
    { 
     insert(&((*tree)->right), value); 
    } 
    else 
     return; 
} 

Seitennotiz: Rückblickend habe ich nie berücksichtigt, einen Knoten mit dem gleichen Wert wie ein existierender Knoten hinzuzufügen, wenn das überhaupt möglich ist.

Ich nehme an, Sie werden etwas Ähnliches tun. Jetzt für das Bit, das Ihre Frage beantwortet, es auszudrucken, auch Rekursion verwendend.

void inorder(node *tree) 
{ 
    if (!(tree == nullptr)) 
    { 
     inorder((tree)->left); 
     cout << (tree->data) << endl;//Prints on new lines, you could comma separate them if you really wanted. 
     inorder((tree)->right); 
    } 
} 

Schließlich Sie Ihren Baum wollen werden, um aufzuräumen, nachdem Sie es verwendet haben, so dass Sie es müssen löschen ... rekursiv.

Um ehrlich zu sein, es ist eine Weile her und diese Rekursion Sache ist immer noch ein wenig verwirrend für mich, also habe ich wahrscheinlich etwas vergessen, aber die Theorie ist da!

Bearbeiten, verwendete Header: <iostream> und <memory>, auch das war c++ nicht c, aber sie sind sehr ähnlich.