Advertisement
Guest User

Untitled

a guest
Feb 21st, 2018
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.43 KB | None | 0 0
  1. #include "RedBlackTreeMedian.h"
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4.  
  5. RBTMed* RedBlackTreeMedianConstruct() {
  6.  
  7. RBTMed *rbtmed = malloc(sizeof(RBTMed));
  8. rbtmed->tree = RedBlackTreeConstruct();
  9.  
  10. rbtmed->parity = 0;
  11. rbtmed->median = NULL;
  12.  
  13. rbtmed->insert = RBTMed_insert;
  14. rbtmed->print_median = RBTMed_print_median;
  15.  
  16. rbtmed->get_successor = get_successor_;
  17. rbtmed->get_predecessor = get_predecessor_;
  18. rbtmed->print = print_;
  19. return rbtmed;
  20. }
  21.  
  22. void RedBlackTreeMedianDestruct(RBTMed* rbtmed) {
  23. RedBlackTreeDestruct(rbtmed->tree);
  24. free(rbtmed);
  25. }
  26.  
  27. void RBTMed_insert(RBTMed *self, RBTNode *node) {
  28. self->tree->insert(self->tree, node);
  29.  
  30. // TODO: think about <= or >= ...
  31. self->parity ^= 1;
  32. if (self->median == NULL)
  33. self->median = node;
  34.  
  35. if (self->parity)
  36. {
  37. if (node->value > self->median->value)
  38. self->median = self->get_successor(self, self->median);
  39. } else {
  40. if (node->value < self->median->value)
  41. self->median = self->get_predecessor(self, self->median);
  42. }
  43. }
  44.  
  45. int RBTMed_print_median(RBTMed* self) {
  46. printf("The median is: %d\n", self->median->value);
  47. return self->median->value;
  48. }
  49.  
  50. RBTNode* get_successor_(RBTMed *self, RBTNode *node) {
  51. return self->tree->get_successor(self->tree, node);
  52. }
  53. RBTNode* get_predecessor_(RBTMed *self, RBTNode *node) {
  54. return self->tree->get_predecessor(self->tree, node);
  55. }
  56. void print_(RBTMed *self) {
  57. self->tree->print(self->tree);
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement