Binärer Suchbaum + Preorder



  • Hallihallo CPP-Gemeinde,

    Bin schon seit 2 Tagen an einem Projekt, einen binären Suchbaum
    zu programmieren. Habe mir eigentlich vorgenommen, dass komplett
    alleine durchzukauen, aber bei diesem Problem fehlt bei mir einfach
    das logische Verständnis.

    Was ich vorher so hatte:

    //-------------------------Suche Einfuege-Position-----------------------
    void Tree::search_position(int pos)
    {
           do                                       //  mache...
           {
             if (pos < root->data)                  // ist wert kleiner
             {                                      // als wurzeldaten?
    
                  if (root->left_son != NULL)       // hat linker Sohn nachfolger?
                  {
                     root = root->left_son;         // NachfolgerL wird neue Wurzel
                  }
             }
             else
             {
                  if (root->right_son != NULL)      // hat rechter Sohn nachfolger?
                  {
                     root = root->right_son;        // NachfolgerR wird neue Wurzel
                  }
             }
           }while((isempty()));                     // ... bis Wurzel leer ist
    };
    //-----------------------------Neuen Wert hinzufuegen--------------------
    bool Tree::newleaf(int wert)
    {
      treestructure *tmp;
      if (tmp = new treestructure)                  // Abfrage1: Konnte neues Blatt
      {                                             // erstellt werden?
    
         if (isempty())                             //  Abfrage2: Ist Wurzel leer?
         {
            root->data = wert;                      //   dann besetze Wurzel
         }                                          //   mit dem neuen Wert
         else
         {
           Tree::search_position(wert);             //   führe Positionssuche durch
    
           if (wert < root->data)
           {
              root->left_son = tmp;                // linker Sohn wird tmp
           }
           else
           {
              root->right_son = tmp;               // rechter Sohn wird tmp
           }
    
           tmp->data = wert;                    // tmp mit neuem Wert versehen
           tmp->parent = root;                  // papa von tmp ist Wurzel
           tmp->left_son = NULL;                // Setze beide Soehne
           tmp->right_son = NULL;               // auf NULL
           root = tmp;                          // tmp wird neue Wurzel
           jumptofirst();                       // Springe an den Urpsrung
         }
         return true;
      }
      else
      {
         return false;
      }
    };
    

    Soll nun rekursiv erfolgen. Alles kein Problem, wenn ich das Post-Order-Verfahren machen würde. Aber unser Professor meinte wir sollten das mal mit Pre-Order-Verfahren durchführen.

    Habt ihr ne Ahnung ?



  • Also Post-Order würde ich das so machen:

    void postorder_anfuegen(treestructure *tree, int wert)
    {
      if (wert < tree->data)
      {
        if (tree->left != NULL)
        {
          postorder_anfuegen(tree->left, int wert);
        }
      }
      else 
      {
        if (tree->right != NULL)
        {
          postorder_anfuegen(tree->right, int wert);
        }
      }
      ja und hier eben dann eben element anfuegen je nachdem ob größer oder kleiner
    }
    

    aber wie soll ich das in preorder umwandeln ?




Anmelden zum Antworten