Удаление в бинарном дереве поиска - PullRequest
0 голосов
/ 28 марта 2011

Почему удаление в BST является операцией O (log (n)).Как я понимаю, это включает в себя освобождение узла и указание родительской ссылки на NULL.Не должно ли это занять O (1)

Ответы [ 4 ]

1 голос
/ 28 марта 2011

Ожидается O (lg n ), если вы начинаете с корня дерева: тогда вам нужно найти элемент, который нужно удалить, а затем его преемника по порядку.

1 голос
/ 28 марта 2011

Проблема заключается в том, как удалить узел, у которого есть два потомка - дерево должно быть реструктурировано, чтобы дети нашли подходящих новых родителей.Подробное объяснение здесь .Google твой друг.

0 голосов
/ 12 июля 2011

Удаление в бинарном дереве поиска - это O (h), где h - высота дерева.

Теперь, когда вы не упомянули, является ли дерево сбалансированным или нет, сложность наихудшего случая для несбалансированногодерево будет O (n), т. е. когда оно является вырожденным деревом.

Если bst является одним из сбалансированных (Avl, красный черный и т. д.), то сложность в худшем случае будет O (lgn) поскольку высота практически всех сбалансированных bst равна K * (lg n).

Например, для дерева avl k = 1 и для красного черного дерева K = 2.

0 голосов
/ 28 марта 2011

Если вы хотите удалить узел и все его дочерние элементы , тогда это просто, но вы должны перестроить дочерние элементы, если хотите сохранить порядок сортировки.

...