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 🙂


Anmelden zum Antworten