Also habe ich eine Baumknoten-Klasse getestet und habe einige Fehler festgestellt. Ich denke, das liegt daran, dass ich private Node-Mitglieder verwende und Accessor-Funktionen nutze, um auf sie zuzugreifen. Mit der Del-Funktion habe ich versucht, den Testbaum beim Traversieren in PostOrder zu drucken und zu löschen, aber es gibt keine Ausgabe außer dem "root".Fehler mit Knoten der Baumklasse, vielleicht wegen der privaten Knotenmitglieder
#include <iostream>
#include <string>
using namespace std;
#ifndef TREENODE_H
#define TREENODE_H
template <class T>
class TreeNode
{
private:
typedef TreeNode<T>* nodePtr;
T data;
nodePtr lst;
nodePtr rst;
public:
TreeNode()
{
lst = NULL;
rst = NULL;
};
TreeNode(T d)
{
data = d;
lst = NULL;
rst = NULL;
};
TreeNode(const TreeNode<T>* other)
{
data = other.data;
lst = other.lst;
rst = other.rst;
};
void setData(T d)
{
data = d;
}
T getData()
{
return data;
}
void setLeft(nodePtr l)
{
lst = l;
}
void setRight(nodePtr r)
{
rst = r;
}
nodePtr getLeft()
{
return lst;
}
nodePtr getRight()
{
return rst;
}
~TreeNode()
{
cout << "gone: " << data;
}
};
#endif
Und
#include <iostream>
#include <string>
#include "TreeNode.cpp"
using namespace std;
void recInsert(string a, TreeNode<string>* current)
{
if (current == NULL)
{
current = new TreeNode <string> ;
current->setData(a);
current->setLeft(NULL);
current->setRight(NULL);
}
else if (a <= current->getData())
recInsert(a, current->getLeft());
else recInsert(a, current->getRight());
};
void del(TreeNode <string> *current)
{
if (current != NULL)
{
del(current->getLeft());
del(current->getRight());
cout << current->getData();
delete current;
}
}
int main()
{
TreeNode<string>* a;
a = new TreeNode <string>;
a->setData("hi");
recInsert("ho", a);
recInsert("bo", a);
recInsert("ao", a);
recInsert("lo", a);
del(a);
}