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