J'ai besoin d'un peu plus d'aide sur mon BST. C'est ce que mon BST ressemble lors de l'insertion:Arbre de recherche binaire C++ (Parents)
R, L, J, G
R --Root at Index 0
/\
L @ Index1 L NULL
/\
J @ Index3 J NULL
/\
G @ Index7 G NULL
Voici le code qui le fait se produire.
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] }
Ma question est quand aurais-je besoin de faire une nouvelle racine? Quand aurais-je besoin de faire une nouvelle racine? Pour la recomparaison?
Cette approche est-elle correcte? Merci à ceux qui même les deux à regarder mes messages :)
// Le constructeur de la classe BST et sa section privée.
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
Pouvez-vous simplifier le problème afin qu'il soit possible d'inclure du code complet? Ou écrivez-le en pseudo code (complet)? Ne pas indiquer ce que des choses comme 'item',' Parent', 'data', etc. rendent difficile de déchiffrer ce que vous faites. –
Pourquoi utilisez-vous un tableau? –
Je poste le constructeur, ainsi que sa section privée où je définis le tableau my pour les données. Désolé pour ça! – user40120