Here - один из вариантов метода remove
для BST
. Цитирую оттуда:удалить метод реализации для двоичного дерева поиска в Java?
Removing an element from a search tree, although tricky,
is conceptually straight-forward with one (common) exception: removing the element at a
node with two non-null children. In this case, the solution is either:
removeMax: remove the maximum (rightmost) node from the left subtree
and replace the root's value with the value of the removed node.
removeMin: remove the minimum (leftmost) node from the right subtree
and replace the root's value with the value of the removed node.
In either case the search tree's order structure is preserved.
Если вы посмотрите на это бинарное дерево,
Я хочу удалить 8
и если я выбираю, чтобы выбрать элемент из leftTree
, используя removeMax
, я выберу 7
в соответствии с выше определения.
, но мне нужно выбрать 13
из right Tree
, используя removeMin
и чтобы перерыть BST
.
Я не понимаю это правильно?
Путь remove
работы является получение либо maximum
от leftTree или minimum
из rightTree
и заменить node
быть удалены с data
.
Почему, по вашему мнению, это ломает BST? Это не так. – EJP
@EJP: В соответствии с определением 'removeMin' выше, мне нужно удалить« левый »узел правого поддерева, который я вижу как« 13 », но, видимо, это не ответы ниже, я не знаю, почему еще –