#python #binary-tree #depth
Вопрос:
Учитывая двоичное дерево, я хотел найти глубину, на которой появляется определенное значение.
def find_depth_of_val(self, root, val):
if not root:
return 10000000
if root.val == val:
return 0
return 1 min(self.find_node(root.right, val), self.find_node(root.left, val))
Это идея, которая у меня была, вы, вероятно, увидите дикое «вернуть 10000000», которое я использовал, чтобы сделать так, чтобы, если на определенном пути больше ничего нет, т. Е. Следующий лист был достигнут, не найдя нужный нам узел, функция знала, что ответа нет, и не возвращала эту возможность.
Мне интересно, есть ли лучший способ сделать это, без использования случайного «возврата 10000000».
Редактировать: Кто-то дал мне решение, в котором я как бы меняю его на:
def find_depth_of_val(self, root, val):
if not root:
return None
if root.val == val:
return 0
right_side = self.find_node(root.right, val)
left_side = self.find_node(root.left, val)
if right_side is None:
return left_side
elif left_side is None:
return right_side
else:
return 1 min(self.find_node(root.right, val), self.find_node(root.left, val))
В таком случае, как это, как я должен вводить подсказку, учитывая, что мы можем возвращать либо Нет, либо целое число?
Тем не менее, я все еще открыт для того, чтобы посмотреть, есть ли у кого-нибудь другие проекты решений!!
Комментарии:
1. Почему бы не использовать бесконечность с плавающей точкой там. Вы можете получить его с
float('inf')
помощью илиmath.inf
.2. Уникальны ли ваши ценности?
Ответ №1:
Это выглядит странно, find_depth_of_val
если в качестве параметров есть и self
(дерево), и root
(другое дерево). Кроме того, когда вы излагаете свою проблему, вы говорите только об одном дереве и self
на самом деле не используете его в своем методе.
Поэтому, если предположить, что ваши значения в дереве уникальны, вот решение. Метод возвращает None
, если путь не найден или иным образом указана глубина. Optional[int]
означает либо int
или либо None
:
def find_depth_of_val(self, val: int) -> Optional[int]:
if self.val == val:
return 0
for node in (self.left, self.right):
if node is not None:
depth = node.find_depth_of_val(val)
if depth is not None:
return depth 1
return None