Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * @brief del_node -- Функция удаления элемента по ключу из дерева
- * @param root -- Корень дерева
- * @param deleting -- Удаляемый узел
- * @return Указатель на корень
- */
- tree *del_node(tree *root, tree *deleting)
- {
- tree *pre_del = find_walk_addr(root, deleting);
- if ((deleting->left == NULL) && (deleting->right) == NULL)
- {
- if (deleting == pre_del->left)
- {
- free(deleting);
- pre_del->left = NULL;
- }
- else
- {
- free(deleting);
- pre_del->right = NULL;
- }
- return root;
- }
- else if ((deleting->left != NULL) && (deleting->right == NULL))
- {
- if (deleting == pre_del->left)
- {
- pre_del->left = deleting->left;
- free(deleting);
- }
- else
- {
- pre_del->right = deleting->left;
- free(deleting);
- }
- return root;
- }
- else if ((deleting->right != NULL) && (deleting->left == NULL))
- {
- if (deleting == pre_del->left)
- {
- pre_del->left = deleting->right;
- free(deleting);
- }
- else
- {
- pre_del->right = deleting->right;
- free(deleting);
- }
- return root;
- }
- else if ((deleting->right != NULL) && (deleting->left != NULL))
- {
- tree *tmp = deleting;
- for (; tmp->left->left; tmp = tmp->left)
- {;}
- deleting->key = tmp->left->key;
- strcpy(deleting->str, tmp->left->str);
- free(tmp->left);
- tmp->left = NULL;
- return root;
- }
- return root;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement