fork download
  1. struct node* delete(struct node* node, struct node* pnode, int target)
  2. {
  3. struct node* rchild;
  4. struct node* rchildparent;
  5. if(node==NULL)
  6. {
  7. return(node);
  8. }
  9.  
  10. if(target == node->data)
  11. {
  12. if(node->left == NULL && node->right == NULL) //leaf node
  13. {
  14. if(pnode == NULL) //special case deleting the root node
  15. {
  16. free(node);
  17. return(NULL);
  18. }
  19. if(pnode->left == node)
  20. {
  21. pnode->left = NULL;
  22. }
  23. else
  24. {
  25. pnode->right = NULL;
  26. }
  27. free(node);
  28. }
  29. else
  30. {
  31. if(node->left ==NULL) //one child
  32. {
  33. if(pnode == NULL) //deleting root having no left child
  34. {
  35. struct node* temp = node;
  36. node = node->right;
  37. free(temp);
  38. return(node);
  39. }
  40. if(pnode->left == node)
  41. {
  42. pnode->left = node->right;
  43. }
  44. else
  45. {
  46. pnode->right = node->right;
  47. }
  48. free(node);
  49. }
  50. else if(node->right ==NULL) //one child
  51. {
  52. if(pnode == NULL) //deleting root having no right child
  53. {
  54. struct node* temp = node;
  55. node = node->left;
  56. free(temp);
  57. return(node);
  58. }
  59. if(pnode->left == node)
  60. {
  61. pnode->left = node->left;
  62. }
  63. else
  64. {
  65. pnode->right = node->left;
  66. }
  67. free(node);
  68. }
  69. else //two children
  70. {
  71. rchild = node->right;
  72. rchildparent=node;
  73. while(rchild->left != NULL)
  74. {
  75. rchildparent=rchild;
  76. rchild = rchild->left;
  77. }
  78. node->data=rchild->data;
  79. if(rchildparent == node)
  80. {
  81. rchildparent->right=rchild->right;
  82. }
  83. else
  84. {
  85. rchildparent->left=NULL;
  86. }
  87. free(rchild);
  88. }
  89. }
  90. return(node);
  91. }
  92. else if(target < node->data)
  93. {
  94. return(delete(node->left,node,target));
  95. }
  96. else
  97. {
  98. return(delete(node->right,node,target));
  99. }
  100. }
  101.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty