Advertisement
Guest User

Untitled

a guest
May 26th, 2018
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.61 KB | None | 0 0
  1. struct node
  2. {
  3. node *left, *right, *up;
  4. int val;
  5. }*root = NULL;
  6.  
  7. node *poprzednik(node *T)
  8. {
  9. if (!T)
  10. cout << "BRAK ELEMENTU"<<endl;
  11. if (T->left)
  12. return max(T->left);
  13. node *p = T->parent;
  14. while ((p) && (T == p->left))
  15. {
  16. T = p;
  17. p = p->parent;
  18. }
  19. return p;
  20. }
  21.  
  22. node *nastepnik(node *T)
  23. {
  24. if (!T)
  25. cout << "BRAK ELEMENTU"<<endl;
  26. if (T->right)
  27. return min(T->right);
  28. node* p = T->parent;
  29. while ((p) && (T = p->right))
  30. {
  31. T = p;
  32. p = p->parent;
  33. }
  34. return p;
  35. }
  36.  
  37. void delete(node*&root, int k) {
  38. node*usuwacz = nastepnik(w);
  39. if (usuwacz)
  40. {
  41. if ((usuwacz->left) && (usuwacz->right))
  42. {
  43. node*pre = poprzednik(usuwacz);
  44. usuwacz->val = pre->val;
  45. if (pre->up->left == pre)
  46. pre->up->left = pre->left;
  47. else
  48. pre->up->right = pre->left;
  49. delete pre;
  50. }
  51. else
  52. {
  53. node* poddrzewo = usuwacz->left ? usuwacz->left : usuwacz->right;
  54.  
  55. if (usuwacz->up)
  56. {
  57. if (usuwacz->up->left == usuwacz)
  58. usuwacz->up->left = poddrzewo;
  59. else
  60. usuwacz->up->right = poddrzewo;
  61.  
  62. if (poddrzewo)
  63. poddrzewo->up = usuwacz->up;
  64. }
  65. else
  66. {
  67. poddrzewo->up = NULL;
  68. root = poddrzewo;
  69. }
  70. delete usuwacz;
  71. }
  72. }
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement