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;
}
}
Ben yani düğümün anahtarı değişen ve böylece düğümü yeniden düzenleme (ve izleyen bir sayı bir dize vardır ve böylece düğümler pair.The anahtar / değer ben düğüm güncelleştirme sorun olan bir dosya kullanarak BST ağaç oluşturduktan ben arama fonksiyonunu kullanarak (bu anahtarın aradığınızda çünkü, doğru bunu şu anahtarı vermez) ağaç üzerinde doğru konumda olduğu; arama fonksiyonu iyi çalışıyor, ben iyice test ettik) i hiçbir eşleştirme olsun tree.I anahtar zaten başka işlevler için yardım almış ve burada bulunabilir:
İkili Arama Ağacı - çalışmıyor işlevini silme













