Обычно существует два способа удаления дерева:
Первый метод:
Удалите узел, затем замените его любым дочерним узлом. Затем выполните восстановление дерева, выполнив замену «родитель-потомок», пока дерево не будет снова отсортировано.
Второй метод:
Пройдите по дереву, чтобы найти следующее (самое высокое или самое низкое) значение, которое принадлежит корню *, если это листовой узел, поменяйте его местами с корнем, а затем обрежьте значение, которое хотите удалить. Если это внутренний узел, вам придется рекурсивно вызывать remove на этом узле. Повторяйте, пока листовой узел не будет удален.
* Я имею в виду, что если вы конвертируете свой BST в отсортированный список, то вы захотите выбрать либо значение слева, либо справа от корня в качестве нового корня. То есть самый левый потомок правого поддерева или самый правый потомок левого поддерева.