Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [C++] Binärbaum Iterativ ausgeben (https://www.delphipraxis.net/114019-%5Bc-%5D-binaerbaum-iterativ-ausgeben.html)

Newbie44 18. Mai 2008 13:57


[C++] Binärbaum Iterativ ausgeben
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz