mettre à jour la valeur de la clé de noeud BST

voix
0
template <class T>
void BinaryTree<T>::UpdateKey(T newkey,T oldkey)
{
     TreeNode<T> *temp,*temp1,*temp2,*temp3;
     temp=Root;
      //checking to see if the new value clashes with any existing value
     while (temp!=NULL)
     {
         if (temp->key==newkey)
         {
            cout<<New key already exists in the tree.CannotUpdate!;                  
            cout<<endl;                 
            return;
         }
         if (newkey>temp->key)
         {
            temp=temp->RightChild;
         }
         else if (newkey<temp->key)
         {
            temp=temp->LeftChild;
         }
     }

     temp=Root;                                  
     while (temp!=NULL)
     {      
         if (temp->key==oldkey)
         {
             temp1=temp->Parent;
             temp->key=newkey;
             if (temp1->LeftChild==temp)  //if the node is the left child of its parent
             {
                 if (temp1->key<temp->key)
                 {
                     //move to right child of node whose key has to be changed and  
                    //then keep on moving to the LeftChild of every node until last 
                     //node is reached and exchange the key/value 
                     temp=temp->RightChild;                     
                     while (temp->LeftChild!=NULL)
                     {
                         temp=temp->LeftChild;
                     }
                     //exchanging key/value of the two nodes
                     temp2=temp;
                     temp3=temp1->LeftChild;
                     temp->key=temp3->key;
                     temp->value=temp3->value;
                     temp3->key=temp2->key;
                     temp3->value=temp2->value;
                 }
                 cout<<Value updated successfully1<<endl;
                 return;
             }
             //if the node is right child of its parent
             else if (temp1->RightChild==temp)
             {
                   //if key of parent is greater than its right child
                  if (temp1->key>temp->key)
                  {
                  //move to the leftchild of the node whose value has to change
                  //and then keep moving to right child until the last node
                      temp=temp->LeftChild;
                      while (temp->RightChild!=NULL)
                      {
                          temp=temp->RightChild;
                      }
                     //exchange value/key of the last node with the node whose value
                      //is updated
                      temp2=temp;
                      temp3=temp1->RightChild;
                      temp->key=temp3->key;
                      temp->value=temp3->value;
                      temp3->key=temp2->key;
                      temp3->value=temp2->value;                  
                  }     
                  cout<<Value updated successfully2<<endl;
                                                                                                             return;     
             }                  
             //comparing newkey with the left child to see if its less than the latter
             if (temp->LeftChild!=NULL && newkey<(temp->LeftChild)->key)
             {

                 temp->key=newkey;                 
                 temp1=temp;        
                 temp=temp->LeftChild;
                 while (temp->RightChild!=NULL)
                 {
                     temp=temp->RightChild;
                 }           
                 temp2=temp1;                            
                 temp1->key=temp->key;
                 temp1->value=temp->value;
                 temp->key=temp2->key;
                 temp->value=temp2->value;

                 cout<<Value updated successfully3<<endl;
                 return;
             }
             //comparing with the right child if it is greater than the latter
             //and moving key/value to the right spot if condition is met
             else if (temp->RightChild!=NULL && newkey>(temp->RightChild)->key)
             {
                 temp->key=newkey;
                 temp1=temp;
                 while (temp->LeftChild!=NULL)
                 {
                     temp=temp->LeftChild;
                 }
                 temp2=temp1;                            
                 temp1->key=temp->key;
                 temp1->value=temp->value;
                 temp->key=temp2->key;
                 temp->value=temp2->value; 

                cout<<Value updated successfully4<<endl;
                return;
             }

         }
         //traversing the tree by comparing oldkey with node key and going in the right
         //direction
         if (oldkey<temp->key)
             temp=temp->LeftChild;
         else if (oldkey>temp->key)
            temp=temp->RightChild;    
     }
}

J'ai construit l'arbre BST à l' aide d' un fichier qui a une chaîne suivie d'un nombre et pour que les noeuds ont un problème paire.Procédé clé / valeur est quand je mets à jour le nœud (ie changer la clé du nœud et réarranger le noeud de telle sorte que il est dans la bonne position sur l'arbre), il ne donne pas correctement ce que la clé parce que quand je cherche cette clé ( en utilisant la fonction de recherche, Ma fonction de recherche fonctionne bien, je l' ai testé à fond), je reçois pas correspondant clé dans la tree.I ont déjà pris de l' aide pour d'autres fonctions et ils peuvent être trouvés ici:
Binary Search Tree - supprimer la fonction ne fonctionne pas

Créé 26/02/2013 à 19:04
source utilisateur
Dans d'autres langues...                            


1 réponses

mettre à jour la valeur de la clé de noeud BST

voix
0
template <class T>
void BinaryTree<T>::UpdateKey(T newkey,T oldkey)
{
     TreeNode<T> *temp,*temp1,*temp2,*temp3;
     temp=Root;
      //checking to see if the new value clashes with any existing value
     while (temp!=NULL)
     {
         if (temp->key==newkey)
         {
            cout<<"New key already exists in the tree.CannotUpdate!";                  
            cout<<endl;                 
            return;
         }
         if (newkey>temp->key)
         {
            temp=temp->RightChild;
         }
         else if (newkey<temp->key)
         {
            temp=temp->LeftChild;
         }
     }

     temp=Root;                                  
     while (temp!=NULL)
     {      
         if (temp->key==oldkey)
         {
             temp1=temp->Parent;
             temp->key=newkey;
             if (temp1->LeftChild==temp)  //if the node is the left child of its parent
             {
                 if (temp1->key<temp->key)
                 {
                     //move to right child of node whose key has to be changed and  
                    //then keep on moving to the LeftChild of every node until last 
                     //node is reached and exchange the key/value 
                     temp=temp->RightChild;                     
                     while (temp->LeftChild!=NULL)
                     {
                         temp=temp->LeftChild;
                     }
                     //exchanging key/value of the two nodes
                     temp2=temp;
                     temp3=temp1->LeftChild;
                     temp->key=temp3->key;
                     temp->value=temp3->value;
                     temp3->key=temp2->key;
                     temp3->value=temp2->value;
                 }
                 cout<<"Value updated successfully1"<<endl;
                 return;
             }
             //if the node is right child of its parent
             else if (temp1->RightChild==temp)
             {
                   //if key of parent is greater than its right child
                  if (temp1->key>temp->key)
                  {
                  //move to the leftchild of the node whose value has to change
                  //and then keep moving to right child until the last node
                      temp=temp->LeftChild;
                      while (temp->RightChild!=NULL)
                      {
                          temp=temp->RightChild;
                      }
                     //exchange value/key of the last node with the node whose value
                      //is updated
                      temp2=temp;
                      temp3=temp1->RightChild;
                      temp->key=temp3->key;
                      temp->value=temp3->value;
                      temp3->key=temp2->key;
                      temp3->value=temp2->value;                  
                  }     
                  cout<<"Value updated successfully2<<endl;
                                                                                                             return;     
             }                  
             //comparing newkey with the left child to see if its less than the latter
             if (temp->LeftChild!=NULL && newkey<(temp->LeftChild)->key)
             {

                 temp->key=newkey;                 
                 temp1=temp;        
                 temp=temp->LeftChild;
                 while (temp->RightChild!=NULL)
                 {
                     temp=temp->RightChild;
                 }           
                 temp2=temp1;                            
                 temp1->key=temp->key;
                 temp1->value=temp->value;
                 temp->key=temp2->key;
                 temp->value=temp2->value;

                 cout<<"Value updated successfully3"<<endl;
                 return;
             }
             //comparing with the right child if it is greater than the latter
             //and moving key/value to the right spot if condition is met
             else if (temp->RightChild!=NULL && newkey>(temp->RightChild)->key)
             {
                 temp->key=newkey;
                 temp1=temp;
                 while (temp->LeftChild!=NULL)
                 {
                     temp=temp->LeftChild;
                 }
                 temp2=temp1;                            
                 temp1->key=temp->key;
                 temp1->value=temp->value;
                 temp->key=temp2->key;
                 temp->value=temp2->value; 

                cout<<"Value updated successfully4"<<endl;
                return;
             }

         }
         //traversing the tree by comparing oldkey with node key and going in the right
         //direction
         if (oldkey<temp->key)
             temp=temp->LeftChild;
         else if (oldkey>temp->key)
            temp=temp->RightChild;    
     }
}

J'ai construit l'arbre BST à l' aide d' un fichier qui a une chaîne suivie d'un nombre et pour que les noeuds ont un problème paire.Procédé clé / valeur est quand je mets à jour le nœud (ie changer la clé du nœud et réarranger le noeud de telle sorte que il est dans la bonne position sur l'arbre), il ne donne pas correctement ce que la clé parce que quand je cherche cette clé ( en utilisant la fonction de recherche, Ma fonction de recherche fonctionne bien, je l' ai testé à fond), je reçois pas correspondant clé dans la tree.I ont déjà pris de l' aide pour d'autres fonctions et ils peuvent être trouvés ici:
Binary Search Tree - supprimer la fonction ne fonctionne pas

Créé 26/02/2013 à 19:04
source utilisateur

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