Ich brauche nur ein wenig mehr Hilfe auf meinem BST. Dies ist, was mein BST sieht aus wie beim Einfügen:
R, L, J, G
R --Root at Index 0
/ \
L @ Index1 L NULL
/ \
J @ Index3 J NULL
/ \
G @ Index7 G NULL
Hier ist der Code, lässt es geschehen.
void BST::insert(const data &aData)
{
if ( items[Parent].empty )
{
items[Parent].theData = aData; // insert at leaf.
items[Parent].empty = false;
size++;
return;
}
for ( int i = 0; i <= size; i++ )
{
if ( aData < items[Parent].theData )
{
if ( items[2*i+1].empty )
{
items[2*i+1].theData = aData;
items[2*i+1].empty = false;
}
else
{
// we must already have a left child to some root.
Parent++; So make the previous data the root???
if ( items[Parent].empty )
{
items[Parent].theData = items[2*i+1].theData;
items[Parent].empty = false;
Parent = (i-1)/2;
}
}
}
else
{ ...// do the same for data greater than but with items[2*i+2] }
Meine Frage ist, dass, wenn ich würde eine neue Wurzel machen muß? Wann würde ich eine neue Wurzel machen müssen? Für recomparison?
Ist dieser Ansatz richtig? Vielen Dank an diejenigen, die beide auch an meine Beiträge zu sehen :)
// Der Konstruktor der BST-Klasse und seine privaten Bereich.
BST::BST(int capacity) : items(new item[capacity]), size(0), Parent(0),
leftChild(0), rightChild(0)
{
items->empty = true;
maxSize = capacity;
}
private:
int size; // size of the ever growing/expanding tree :)
int Parent;
int maxSize;
int leftChild;
int rightChild;
struct item
{
bool empty;
data theData;
};
item *items; // The tree array













