Advertisement
Guest User

Untitled

a guest
May 28th, 2015
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.12 KB | None | 0 0
  1. /* Deleting a node from Binary search tree */
  2. #include<iostream>
  3. using namespace std;
  4. struct Node {
  5. int data;
  6. struct Node *left;
  7. struct Node *right;
  8. };
  9. //Function to find minimum in a tree.
  10. Node* FindMin(Node* root)
  11. {
  12. while(root->left != NULL) root = root->left;
  13. return root;
  14. }
  15.  
  16. // Function to search a delete a value from tree.
  17. struct Node* Delete(struct Node *root, int data) {
  18. if(root == NULL) return root;
  19. else if(data < root->data) root->left = Delete(root->left,data);
  20. else if (data > root->data) root->right = Delete(root->right,data);
  21. // Wohoo... I found you, Get ready to be deleted
  22. else {
  23. // Case 1: No child
  24. if(root->left == NULL && root->right == NULL) {
  25. delete root;
  26. root = NULL;
  27. }
  28. //Case 2: One child
  29. else if(root->left == NULL) {
  30. struct Node *temp = root;
  31. root = root->right;
  32. delete temp;
  33. }
  34. else if(root->right == NULL) {
  35. struct Node *temp = root;
  36. root = root->left;
  37. delete temp;
  38. }
  39. // case 3: 2 children
  40. else {
  41. struct Node *temp = FindMin(root->right);
  42. root->data = temp->data;
  43. root->right = Delete(root->right,temp->data);
  44. }
  45. }
  46. return root;
  47. }
  48.  
  49. //Function to visit nodes in Inorder
  50. void Inorder(Node *root) {
  51. if(root == NULL) return;
  52.  
  53. Inorder(root->left); //Visit left subtree
  54. printf("%d ",root->data); //Print data
  55. Inorder(root->right); // Visit right subtree
  56. }
  57.  
  58. // Function to Insert Node in a Binary Search Tree
  59. Node* Insert(Node *root,char data) {
  60. if(root == NULL) {
  61. root = new Node();
  62. root->data = data;
  63. root->left = root->right = NULL;
  64. }
  65. else if(data <= root->data)
  66. root->left = Insert(root->left,data);
  67. else
  68. root->right = Insert(root->right,data);
  69. return root;
  70. }
  71.  
  72. int main() {
  73. /*Code To Test the logic
  74. Creating an example tree
  75. 5
  76. / \
  77. 3 10
  78. / \ \
  79. 1 4 11
  80. */
  81. Node* root = NULL;
  82. root = Insert(root,5); root = Insert(root,10);
  83. root = Insert(root,3); root = Insert(root,4);
  84. root = Insert(root,1); root = Insert(root,11);
  85.  
  86. // Deleting node with value 5, change this value to test other cases
  87. root = Delete(root,5);
  88.  
  89. //Print Nodes in Inorder
  90. cout<<"Inorder: ";
  91. Inorder(root);
  92. cout<<"\n";
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement