Удаление частей дерева двоичного поиска

Я пытаюсь решить следующую проблему:

Вернуть корень двоичного дерева поиска t, модифицированного так, чтобы оно содержало только значения <= k. (Используя обычный класс BST, где у нас есть элемент, слева и справа)

def prune(t,k):
    if not t:
        return None
    if k < t.item
        while t.item > k:
            t = t.left
    return t

Я думаю, что я делаю это совершенно неправильно.. Может быть, есть какой-то простой рекурсивный способ сделать это?

1 ответ

Я думаю, что вы хотите что-то вроде:

def prune(t, k):
    if t is None or t.item > k:
        return None
    t.right = prune(t.right, k)
    return t

Это рекурсивно и "подрезает", когда достигнет None узел или узел больше чем k, Поскольку это BST, t.item <= k означает, что все узлы в t.left будет тоже, поэтому мы можем их игнорировать.

Другие вопросы по тегам