Advertisement
Guest User

Untitled

a guest
Feb 20th, 2020
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.70 KB | None | 0 0
  1. /**
  2.  * Definition for a binary tree node.
  3.  * struct TreeNode {
  4.  *     int val;
  5.  *     struct TreeNode *left;
  6.  *     struct TreeNode *right;
  7.  * };
  8.  */
  9.  
  10.  
  11. struct TreeNode* deleteNode(struct TreeNode* root, int key){
  12.    
  13.     if(root == NULL)
  14.     {
  15.         //checks if this node is a leaf
  16.         return root;
  17.     }else if(root->val == key)
  18.     {
  19.        
  20.         if(root->right == NULL && root->left == NULL)
  21.         {
  22.             //if the to-be deleted node is a leaf
  23.             //assign it to NULL
  24.             root = NULL;
  25.         }else
  26.         {
  27.             //the problem lies in shifitng the nodes under the deleted one (subtree) up the tree
  28.             //And not assigning it to null
  29.             if(root->right->left != NULL && root->left->right == NULL)
  30.             {
  31.                 if(root->right == NULL)
  32.                     root->val = root->left->val;
  33.                 else if(root->left == NULL)
  34.                     root->val == root->right->val;
  35.                 else
  36.                     root->val = NULL;
  37.             }else if(root->right->left != NULL)
  38.             {
  39.                 root->val = root->right->left->val;
  40.                 root = deleteNode(root->right->left, root->val);
  41.             }else if(root->right->left != NULL)
  42.             {
  43.                 root->val = root->left->right->val;
  44.                 root = deleteNode(root->left->right, root->val);
  45.             }else
  46.             {
  47.                 root->val = NULL;
  48.             }
  49.        
  50.         }
  51.         return root;
  52.     }
  53.     else
  54.     {
  55.         //recursive traversal
  56.         root->left = deleteNode(root->left, key);
  57.         root->right = deleteNode(root->right, key);
  58.         return root;
  59.     }
  60.  
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement