Advertisement
Guest User

Untitled

a guest
Dec 8th, 2016
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.06 KB | None | 0 0
  1. if(node->left == NULL && node->right == NULL)//leaf node
  2. {
  3. if(node == *p_root)
  4. *p_root = NULL;
  5.  
  6. else
  7. {
  8. if(node->parent->left == node)
  9. node->parent->left = NULL;
  10.  
  11. else
  12. node->parent->right = NULL;
  13. }
  14. }
  15.  
  16. else if(node->right == NULL)// singular left child
  17. {
  18. if(node == *p_root)
  19. *p_root = node->left;
  20.  
  21. else
  22. {
  23. if(node->parent->right == node)
  24. node->parent->right = node->left;
  25.  
  26. else
  27. node->parent->left = node->left;
  28.  
  29. node->left->parent = node->parent;
  30. }
  31. }
  32.  
  33. else if(node->left == NULL)//singular right child
  34. {
  35. if(node == *p_root)
  36. *p_root = node->right;
  37.  
  38. else
  39. {
  40. if(node->parent->right == node)
  41. node->parent->right = node->right;
  42.  
  43. else
  44. node->parent->left = node->right;
  45.  
  46. node->right->parent = node->parent;
  47. }
  48. }
  49. else if(node->left != NULL && node->right != NULL)//two children
  50. {
  51. struct tree_node *maxleft_par = NULL;
  52. struct tree_node *maxleft = node->left;//initial Max left
  53.  
  54. while(maxleft->right) //max left
  55. {
  56. maxleft_par = maxleft;
  57. maxleft = maxleft->right;
  58. }
  59.  
  60. //check to see if maxleft is the root of another tree that's smaller (aka if it has a left child)
  61. if(maxleft->left != NULL) //sub tree
  62. {
  63. struct tree_node *temp = maxleft;
  64.  
  65. maxleft_par->right = maxleft->left;//changes pointers parents/child
  66. free(maxleft);
  67. maxleft_par->right->parent = maxleft_par;
  68.  
  69. node->left->parent = temp;
  70. temp->left = node->left;
  71. node->right->parent = temp;
  72. temp->right = node->right;
  73.  
  74. if(node == *p_root)
  75. *p_root = temp;
  76.  
  77. else
  78. {
  79. if(node->parent->left == node)
  80. node->parent->left = temp;
  81.  
  82. else
  83. node->parent->right = temp;
  84.  
  85. temp->parent = node->parent;
  86. }
  87. }
  88.  
  89. else//non -existant sub tree
  90. {
  91. if(maxleft_par == NULL)
  92. {
  93. maxleft->right = node->right;
  94. node->right->parent = maxleft;
  95. *p_root = maxleft;
  96. }
  97. }
  98.  
  99. }
  100.  
  101. node->left = NULL;
  102. node->right = NULL;
  103. node->parent = NULL;
  104.  
  105. return node;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement