Я хочу найти узел - V, в бинарном дереве поиска, которое соответствует одному (и только один) из следующих условий: левое поддеревонайти нелегальный узел в бинарном дереве поиска
- Ви включает по меньшей мере, одно значение, которое меньше, чем против
- правое поддерево V включает в себя по меньшей мере одно значение, которое больше, чем против
Я знаю, что именно один узел v существует в моем дереве - T, и я хотел бы Найди это.
Я думал об этом алгоритме, учитывая дерево T:
- Проверьте левый сын T является больше, то корень, или если право сын T является меньше, чем корень, если один из этих условий истинно - вернуть корень.
- Else, проверьте рекурсивные правые и левые поддеревья Т, если они существуют. Если обе они не существуют, это означает, что мы достигли листа и возвращаем -1 (не должно быть)
Итак, мой первый вопрос: правильно ли алгоритм? делает ли это то, что, как предполагается? Во-вторых, мне нужно, чтобы это было во временной сложности O(n)
, это происходит?
Если я ошибаюсь, я хотел бы получить правильный алгоритм для этой задачи
Ваша проблема не выглядит четко определенной. Если вы можете попытаться очистить свою формулировку от того, что вы пытаетесь сделать, то кто-то может предоставить вам правильное решение. Как отметил Sneftel, ваше решение тоже не работает ... так что вы, возможно, захотите также убрать это в своем вопросе. –