Einzelnen Beitrag anzeigen

Newbie44
(Gast)

n/a Beiträge
 
#1

[C++] Binärbaum Iterativ ausgeben

  Alt 18. Mai 2008, 13:57
Hallo,

ich hab mir folgenden Code geschrieben:

Code:
#include <iostream>

template <typename T>
class Node
{
private:
   T value;

   Node* smaller;
   Node* equal;
   Node* larger;

public:
   Node(const T& a) : value(a), smaller(0), equal(0), larger(0)
   {
   }   
   virtual ~Node()
   {
      if (smaller)
         delete smaller;
      if (equal)
         delete equal;
      if (larger)
         delete larger;
   }

   void insert(const T& a)
   {
      if (a < value)
      {
         if (!smaller)
            smaller = new Node(a);
         else
            smaller->insert(a);
      }
      else if (a == value)
      {
         if (!equal)
            equal = new Node(a);
         else
            equal->insert(a);
      }
      else
      {
         if (!larger)
            larger = new Node(a);
         else
            larger->insert(a);
      }
   }
   void print()
   {
      if (smaller)
         smaller->print();
      if (equal)
         equal->print();
      std::cout << " " << value << " "<< this << std::endl;
      if (larger)
         larger->print();
   }
};

template <typename T>
class Tree
{
private:   
   Node<T>* root;

public:
   Tree() : root(0)
   {
   }
   virtual ~Tree()
   {
      if (root)
         delete root;
   }

   void insert(const T& a)
   {
      if (root)
         root->insert(a);
      else
         root = new Node<T>(a);
   }
   void print()
   {
      if (root)
      {
         root->print();
         std::cout << std::endl;
      }
      else
         std::cout << "<empty>" << std::endl;
   }
};

int main(int argc, char* argv[])
{
   Tree<std::string> tree;

   tree.insert("schedl");
   tree.insert("beck");
   tree.insert("knackfuß");
   tree.insert("geier");
   tree.insert("nierlein");
   tree.insert("kiendl");

   tree.print();
   system("pause");
}
Ich hab jetzt nur ein Problem. Ich will Ihn jetzt Iterativ ausgeben. Rekursiv war das ganze ja nicht schwer, jedoch kann das ja Stacküberlauf hervorrufen.

Könnt Ihr mir dabei bitte helfen? Mein Problem ist das Lexigrafische ausgeben, ich geh ja in der rekursion immer erst links, dann geradeaus und dann rechts also (kleiner, gleich, größer)

wie mach ich das mit einer for-schleife? Ich steh im moment auf dem schlauch

gruß und danke für eure hilfe im voraus

Sebastian
  Mit Zitat antworten Zitat