Binärer Suchbaum - Strukturierte Ausgabe
-
Hallo liebe Community,
ich habe einen binären Suchbaum programmiert und möchte diesen nun auf folgende Weise ausgeben:
Zunächst wird der Wert der Wurzel ausgegeben. Hat ein Knoten einen linken oder rechten Teilbaum, so wird nach dem Wert des Knotens das Symbol "(" ausgegeben.
In der Klammer wird nun zunächst der linke Teilbaum ausgegeben, gefolgt vom Symbol "," und anschließend der rechte Teilbaum, gefolgt vom Symbol ")".Als Beispiel:
Wenn ich nacheinander die Werte 7, 1, 3, 8, 2, 9, 5, 4, 6, 0 in einen Baum einfüge und diesen anschließend ausgebe, sollte die Ausgabe folgender Weise aussehen: 7(1(0,3(2,5(4,6))),8(,9))Dass die Werte in der richtigen Reihenfolge dastehen und die "(" Klammern bekomme ich hin, aber mit den Kommata und den ")" Klammern komme ich nicht zurecht. Ich habe davon immer zuviele oder zuwenige in meiner Ausgabe. Ich dachte daher, dass ich die Ausgabe an eine if-Bedingung knüpfe, aber auch das will mir nicht gelingen, da ich nicht wirklich weiß, wie ich diese richtig formulieren muss.
Mein Code sieht so aus:// Definition der Struktur eines Knotens struct Node { int value; // Knotenwert Node* left; // linker Teilbaum Node* right; // rechter Teilbaum }; // Ausgabe der Baumstruktur void PrintTree(Node* root) { if (root == 0) { return; }; cout << root -> value; if (root -> left != 0 || root -> right != 0) cout << "("; PrintTree(root -> left); if (root -> left == 0) cout << ","; PrintTree(root -> right); if (root -> right == 0) cout << ")"; }Ich bin für jeden Hinweis dankbar.
-
ungetestet, aber idee sollte klar werden:
void PrintTree(Node* root) { if (root == 0) return; cout << root -> value; if( root->left && root->right) { cout << '('; PrintTree( root->left ); cout << ','; PrintTree( root->right ); cout << ')'; } else { //left / right / nothing root* next = root->left ? root->left : root->right; if( !next ) return; cout << '('; PrintTree( next ); cout << ')'; } }bb
-
Super! Besten Dank
