Advertisement
Guest User

Untitled

a guest
Nov 25th, 2014
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.01 KB | None | 0 0
  1. bool MSearchTree::remove(Key* kljuc)
  2. { if (koren==0) return false;
  3. if (!(lookup(kljuc))) return false;
  4. TreeNode* ptr1=koren;
  5. TreeNode* ptr2=koren;
  6. TreeNode* ptr3=0;
  7. int g;
  8. Key* zaOdstrel=kljuc;
  9. while(!(ptr1->contains(kljuc)))
  10. {ptr3=ptr1;
  11. ptr1=ptr1->getChildNode(g=ptr1->getChildNodeIndex(zaOdstrel));
  12. ptr2=ptr2->getChildNode(ptr2->getChildNodeIndex(zaOdstrel));}
  13.  
  14. while(1)
  15. {if (ptr2->anyPointers())
  16. {if (ptr1->anyLeftPointers(ptr1->getKeyIndex(zaOdstrel)))
  17. { ptr3=ptr1;
  18. ptr1=ptr1->getChildNode(g=ptr1->anyLeftPointersIndex(ptr1->getKeyIndex(zaOdstrel)));
  19. while(1){
  20. if (ptr1->getChildNode(m)!=0) {ptr3=ptr1;
  21. g=m;
  22. ptr1=ptr1->getChildNode(m);
  23. continue;}
  24. if (ptr1->getChildNode(m)==0) {ptr2->remove(zaOdstrel);
  25.  
  26. ptr2->add(new Key(*ptr1->getMaxKey()));
  27. zaOdstrel=ptr1->getMaxKey();
  28. ptr2=ptr1;
  29. break;
  30. }}}
  31.  
  32.  
  33. if (ptr1->anyRightPointers(ptr1->getKeyIndex(zaOdstrel)))
  34. { ptr3=ptr1;
  35. ptr1=ptr1->getChildNode(g=ptr1->anyRightPointersIndex(ptr1->getKeyIndex(zaOdstrel)));
  36. while(1)
  37. {if (ptr1->getChildNode(0)!=0) {ptr3=ptr1;
  38. g=0;
  39. ptr1=ptr1->getChildNode(0);
  40. continue;}
  41. if (ptr1->getChildNode(0)==0) {ptr2->remove(zaOdstrel);
  42.  
  43. ptr2->add(new Key(*ptr1->getMinKey()));
  44. zaOdstrel=ptr1->getMinKey();
  45. ptr2=ptr1;
  46. break;}}}}
  47.  
  48. if (!(ptr2->anyPointers()))
  49. {ptr2->removeFromLeaf(zaOdstrel);
  50. if (ptr2->getKeysCount()==0)
  51. {if (ptr2==koren) {delete koren; koren=0; break;}
  52. delete ptr2;
  53. ptr3->setChildNode(0,g);}
  54. break;}}return true;}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement