Advertisement
Guest User

Untitled

a guest
Oct 20th, 2019
240
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.64 KB | None | 0 0
  1. template <class K, class V>
  2. void AVLTree<K, V>::remove(Node*& subtree, const K& key)
  3. {
  4. if (subtree == NULL)
  5. return;
  6.  
  7. if (key < subtree->key) {
  8. remove(subtree->left, key);
  9. rebalance(subtree);
  10. } else if (key > subtree->key) {
  11. remove(subtree->right, key);
  12. rebalance(subtree);
  13. } else {
  14. if (subtree->left == NULL && subtree->right == NULL) {
  15. /* no-child remove */
  16. // your code here
  17. delete subtree;
  18. subtree = NULL;
  19. } else if (subtree->left != NULL && subtree->right != NULL) {
  20. /* two-child remove */
  21. // your code here
  22. Node * iop = subtree->left;
  23. swap(iop, subtree);
  24. if (iop->left == NULL && iop->right == NULL) {
  25. delete iop;
  26. iop = NULL;
  27. }
  28. else{
  29. if(iop->right !=NULL){
  30. Node * right = iop->right;
  31. delete iop;
  32. iop = right;
  33. }
  34. else{
  35. Node* left = iop->left;
  36. delete iop;
  37. iop = left;
  38. }
  39. }
  40. rebalance(iop);
  41. } else {
  42. /* one-child remove */
  43. // your code here
  44. if(subtree->right !=NULL){
  45. Node * right = subtree->right;
  46. delete subtree;
  47. subtree = right;
  48. }
  49. else{
  50. Node* left = subtree->left;
  51. delete subtree;
  52. subtree = left;
  53. }
  54. }
  55. rebalance(subtree);
  56. }
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement