Не понимаю, это (BST) пример алгоритма двоичного поиска дерева

голоса
2

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

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

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

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

Я что-то упускаю?

Задан 12/04/2011 в 20:58
источник пользователем
На других языках...                            


1 ответов

голоса
1

Я мог бы быть неправильно, но код на который ссылается сайт, кажется, в порядке. Я не проверял, хотя.

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

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


Ответил 12/04/2011 в 21:25
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more