Не понимаю этот пример алгоритма бинарного дерева поиска (BST) - PullRequest
2 голосов
/ 12 апреля 2011

В коде удаления от здесь .

Я не понимаю первый фрагмент кода удаления (где у узла нет двух дочерних элементов).

Если у удаляемого узла есть родитель и дочерний элемент (т. Е. У узла есть один дочерний элемент), как это работает?

Код просто удаляет узел, а не устанавливает указатели родителя на осиротевшего потомка.

Я что-то упустил?

1 Ответ

1 голос
/ 13 апреля 2011

Я могу ошибаться, но код на указанном сайте выглядит нормально.Я не проверял это, однако.

Это правда, потому что функция удаления принимает один аргумент, который имеет тип узла BSTNode **.Это НЕ указатель на узел.Это указатель на указатель родительского узла на сам узел .Это может быть немного неаккуратно, но я должен признать, что после понимания того, что делает код, это элегантное в своем роде решение.Поэтому, когда вы переписываете (* узел), вы не переписываете сам узел , вместо этого вы переписываете указатель родительского узла на узел .По сути, код делает то, что вы предложили, слегка извращенным способом: D.Надеюсь, вы поняли, что я имел в виду, и надеюсь, я понял это правильно.

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


...