Έχω προσπαθήσει να το κάνει recursively..The μητρικής ακέραιο varaible θα είναι όπως εγώ, σύμφωνα με τον τύπο, 2*i +1για leftChild«s και 2*i +2για το δικαίωμα.
void BST::insert(const data &aData)
{
if ( items[Parent].empty )
{
items[Parent].theData = aData;
items[Parent].empty = false;
}
else if ( aData < items[Parent].theData )
{
Parent = 2 * Parent + 1;
if ( Parent >= maxSize ) this->reallocate();
this->insert(aData);
}
else
{
Parent = (2 * rightChild++)+ 2;
if ( Parent >= maxSize ) this->reallocate();
this->insert(aData);
}
}
Λειτουργεί μια χαρά όταν τοποθετείτε αντικείμενα που είναι μικρότερη από την αρχική μητρική ... Αλλά όταν βρίσκω κάτι που είναι μεγαλύτερο αυτό όλες οι βίδες μέχρι: x
void BST::reallocate()
{
item *new_array = new item[maxSize*2];
for ( int array_index = 0; array_index < maxSize; array_index++ )
{
if ( ! items[array_index].empty )
{
new_array[array_index].theData = items[array_index].theData;
}
}
maxSize *= 2;
delete [] items;
items = NULL;
items = new_array;
}
Εδώ είναι ctor μου, έτσι κανείς δεν παίρνει πια σύγχυση τότε είμαι:
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
Η λειτουργία εισαγωγής παραπάνω είναι πραγματικά το καλύτερο που μπορώ να πάρω ..
R
/ \
/ \
/ \
L X
/ \ / \
J V K T <--The only out of place node.
/ \ \
/ NULL \
G /
P
Κατά την εισαγωγή: R, L, J, G, X, K, V, P, Tμε αυτή τη σειρά













