Advertisement
Guest User

Untitled

a guest
Dec 5th, 2016
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.72 KB | None | 0 0
  1. /**
  2.  * @brief del_node -- Функция удаления элемента по ключу из дерева
  3.  * @param root -- Корень дерева
  4.  * @param deleting -- Удаляемый узел
  5.  * @return Указатель на корень
  6.  */
  7. tree *del_node(tree *root, tree *deleting)
  8. {
  9.     tree *pre_del = find_walk_addr(root, deleting);
  10.  
  11.     if ((deleting->left == NULL) && (deleting->right) == NULL)
  12.     {
  13.         if (deleting == pre_del->left)
  14.         {
  15.             free(deleting);
  16.             pre_del->left = NULL;
  17.         }
  18.         else
  19.         {
  20.             free(deleting);
  21.             pre_del->right = NULL;
  22.         }
  23.         return root;
  24.     }
  25.     else if ((deleting->left != NULL) && (deleting->right == NULL))
  26.     {
  27.         if (deleting == pre_del->left)
  28.         {
  29.             pre_del->left = deleting->left;
  30.             free(deleting);
  31.         }
  32.         else
  33.         {
  34.             pre_del->right = deleting->left;
  35.             free(deleting);
  36.         }
  37.         return root;
  38.     }
  39.     else if ((deleting->right != NULL) && (deleting->left == NULL))
  40.     {
  41.         if (deleting == pre_del->left)
  42.         {
  43.             pre_del->left = deleting->right;
  44.             free(deleting);
  45.         }
  46.         else
  47.         {
  48.             pre_del->right = deleting->right;
  49.             free(deleting);
  50.         }
  51.         return root;
  52.     }
  53.     else if ((deleting->right != NULL) && (deleting->left != NULL))
  54.     {
  55.         tree *tmp = deleting;
  56.         for (; tmp->left->left; tmp = tmp->left)
  57.         {;}
  58.  
  59.         deleting->key = tmp->left->key;
  60.         strcpy(deleting->str, tmp->left->str);
  61.         free(tmp->left);
  62.         tmp->left = NULL;
  63.         return root;
  64.     }
  65.  
  66.     return root;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement