Im C benim Dizi Tabanlı BST doldurma ile sıkışmış ++

oy
0

Im de algoritmayı takip ederek, İkili Arama Ağacı esaslı bir dizi inşa etmeye çalışıyoruz:

http://highered.mcgraw-hill.com/olcweb/cgi/pluginpop.cgi?it=gif::600::388::/sites/dl/free/0070131511/25327/tree_insert.gif::TREE-INSERT YOKSAY .

... Aşağıdaki kod ile geldi algoritması kullanılarak:

void BST::insert( const data &aData )
{
     item *y = &items[root_index];   // Algorithm calls for NULL assignment..
     item *x = &items[root_index]; 

while ( ! items[root_index].empty )
{
    y->theData = x->theData; // Ptrs are required or else a crash occurs.
    if ( aData < x->theData )
    {
        x->leftChild = aData;
    }
    else
    {
        x->rightChild = items[root_index].theData;
    } 

    // what is p[z] = y? is it outside the looping scheme?

    root_index++; // and make the new child the root?   
}
    if ( y->empty ) 
    {
        items[root_index].theData = aData;
        items[root_index].empty = false;
    }
    else if ( aData < y->theData )
    {
        y->leftChild = aData; 
    // If we already have a left/right child...make it the root? re-cmpr?
              }
    else
    {
        y->rightChild = items[root_index].theData;
    }

  }

Sorular:

y araçlar .... Im sadece traversler taklit kök artan - Ne p [z] <çözemiyorum.

Zaten bir sağ / sol çocuğu varsa o zaman ben o sol / sağ çocuğu yapmalıdır Taht im kök üzerine yazmak ne olacak? Orada ben orijinal kökü, R geri dönmek böylece recurisve yapmak gerekir?

Eklemeler ( R) eklemek; ( A) eklemek; ( F) eklemek; ( L) eklemek; ( B) eklemek; ( C) eklemek; ( T) eklemek;

Oluştur 14/11/2009 saat 05:00
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
1

benim tahminim sizin if / else deyimi doğru karşılaştırarak olmamasıdır:

aData->getName() < items[root_index].theData

neden olmasın

(*aData) < items[root_index].theData

??

getName yöntemi esas çalışması için karşılaştırma için nesnenin bir kopyasını döndürmek gerekir.

İşte BST için yazdığı takın yöntemidir:

    /* Insert by node */
    template<class T>
    void Tree<T>::Insert(Node<T> *insertingNode)
    {
        Node<T> *y = NULL;
        Node<T> *x = &this->Root;

        while( x != NULL)
        {
            // y is used as a temp
            y = x;

            // given value less than current
            if(insertingNode->value < x->value)
            {
                // move to left of current
                x = x->ptrLeft;
            }
            else
            {
                // move to right of current
                x = x->ptrRight;
            }
        }

        // now, we're in place
        // parent of inserting value is last node of loop
        insertingNode->ptrParent = y;

        // if there is no node here, insert the root
        if (y == NULL)
        {
            Root = *insertingNode;
        }
        else
        {
            // Place inserting value accordingly
            if(insertingNode->value < y->value)
            {
                // Goes on the left
                y->ptrLeft = insertingNode;
            }
            else
            {
                // Goes on the right
                y->ptrRight = insertingNode;
            }
        }

    };
Cevap 14/11/2009 saat 05:22
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more