Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool MSearchTree::remove(Key* kljuc)
- { if (koren==0) return false;
- if (!(lookup(kljuc))) return false;
- TreeNode* ptr1=koren;
- TreeNode* ptr2=koren;
- TreeNode* ptr3=0;
- int g;
- Key* zaOdstrel=kljuc;
- while(!(ptr1->contains(kljuc)))
- {ptr3=ptr1;
- ptr1=ptr1->getChildNode(g=ptr1->getChildNodeIndex(zaOdstrel));
- ptr2=ptr2->getChildNode(ptr2->getChildNodeIndex(zaOdstrel));}
- while(1)
- {if (ptr2->anyPointers())
- {if (ptr1->anyLeftPointers(ptr1->getKeyIndex(zaOdstrel)))
- { ptr3=ptr1;
- ptr1=ptr1->getChildNode(g=ptr1->anyLeftPointersIndex(ptr1->getKeyIndex(zaOdstrel)));
- while(1){
- if (ptr1->getChildNode(m)!=0) {ptr3=ptr1;
- g=m;
- ptr1=ptr1->getChildNode(m);
- continue;}
- if (ptr1->getChildNode(m)==0) {ptr2->remove(zaOdstrel);
- ptr2->add(new Key(*ptr1->getMaxKey()));
- zaOdstrel=ptr1->getMaxKey();
- ptr2=ptr1;
- break;
- }}}
- if (ptr1->anyRightPointers(ptr1->getKeyIndex(zaOdstrel)))
- { ptr3=ptr1;
- ptr1=ptr1->getChildNode(g=ptr1->anyRightPointersIndex(ptr1->getKeyIndex(zaOdstrel)));
- while(1)
- {if (ptr1->getChildNode(0)!=0) {ptr3=ptr1;
- g=0;
- ptr1=ptr1->getChildNode(0);
- continue;}
- if (ptr1->getChildNode(0)==0) {ptr2->remove(zaOdstrel);
- ptr2->add(new Key(*ptr1->getMinKey()));
- zaOdstrel=ptr1->getMinKey();
- ptr2=ptr1;
- break;}}}}
- if (!(ptr2->anyPointers()))
- {ptr2->removeFromLeaf(zaOdstrel);
- if (ptr2->getKeysCount()==0)
- {if (ptr2==koren) {delete koren; koren=0; break;}
- delete ptr2;
- ptr3->setChildNode(0,g);}
- break;}}return true;}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement