Уведомления

Группа в Telegram: @pythonsu

#1 Май 28, 2018 18:22:15

neopytnyj
Зарегистрирован: 2018-05-28
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Бинарное дерево поиска.Нужна функция удаления елемента

class Node:
def __init__(self, val):
self.l_child = None
self.r_child = None
self.data = val

def binary_insert(root, node):
if root is None:
root = node
else:
if root.data > node.data:
if root.l_child is None:
root.l_child = node
else:
binary_insert(root.l_child, node)
else:
if root.r_child is None:
root.r_child = node
else:
binary_insert(root.r_child, node)


def in_order_print(root):
if not root:
return
in_order_print(root.l_child)
print(root.data)
in_order_print(root.r_child)

def pre_order_print(root):
if not root:
return
print(root.data)
pre_order_print(root.l_child)
pre_order_print(root.r_child)

Не могу понять как написать метод или функцию ,которая в данном случае удаляла елементы из дерева.
Но при этом выполнялись условия:1Если вершина v0 не имеет сыновей, просто удаляем ее.
2.Если вершина v0 имеет одного сына, удаляем v0 и заменяем ее сыном.

3.Если v0 имеет двух сыновей, находим правого сына v1 вершины v0, а затем находим левого сына вершины v1 (если он существует). Продолжаем выбирать левых сыновей каждой найденной вершины, пока не найдется такая вершина v, в которой не будет левого сына. Заменим v0 на v и сделаем правого сына вершины v левым сыном отца вершины v


Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version