Advertisement
Guest User

Untitled

a guest
Apr 29th, 2017
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.29 KB | None | 0 0
  1. Node<T>* balance(Node<T>* node)
  2. {
  3. if (node->bfactor() == 2)
  4. {
  5. if (node->right->right->height() < (node->right->left)->height())
  6. node->right = rotate_right(node->right);
  7. return rotate_left(node);
  8. }
  9. else if (node->bfactor() == -2)
  10. {
  11. if ((node->left->left)->height() < (node->left->right)->height())
  12. node->left = rotate_left(node->left);
  13. return rotate_right(node);
  14. }
  15. return node;
  16. }
  17.  
  18. Node<T>* rotate_right(Node<T>* node)
  19. {
  20. ++rotate_c;
  21. Node<T>* p = node->left;
  22. node->left = p->right;
  23. if (node->left)
  24. node->left->parent = node;
  25. Node<T>* n_parent = node->parent;
  26. node->parent = p;
  27. p->parent = n_parent;
  28. if (n_parent)
  29. {
  30. if (n_parent->left == node)
  31. n_parent->left = p;
  32. else
  33. n_parent->right = p;
  34. }
  35. p->right = node;
  36. node->fixheight();
  37. p->fixheight();
  38. return p;
  39. }
  40.  
  41. Node<T>* rotate_left(Node<T>* node)
  42. {
  43. ++rotate_c;
  44. Node<T>* q = node->right;
  45. node->right = q->left;
  46. if (node->right)
  47. node->right->parent = node;
  48. Node<T>* n_parent = node->parent;
  49. q->left = node;
  50. node->parent = q;
  51. q->parent = n_parent;
  52. if (n_parent)
  53. {
  54. if (n_parent->left == node)
  55. n_parent->left = q;
  56. else
  57. n_parent->right = q;
  58. }
  59. node->fixheight();
  60. q->fixheight();
  61. return q;
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement