У меня возникают проблемы с получением пути к узлу в двоичном дереве. В частности, я не знаю, как вырезать элементы из стека, когда я возвращаюсь из фрейма стека.Рекурсивно получить путь к узлу в двоичном дереве
def getPath(self, target):
stack = []
def _getPath(head):
nonlocal stack
nonlocal target
stack.append(head)
if head.value == target:
return stack
if head.left is not None:
_getPath(head.left)
if head.right is not None:
_getPath(head.right)
_getPath(self.root)
return stack
В настоящее время стек будет содержать все элементы в дереве.
В списках есть метод 'pop()', вы попробовали? Поп-элементы из него ... –
@JeffMercado Да, я пробовал это. Проблема заключается не в методе использования. Его как реализовать его рекурсивно (т. Е. Куда его поставить). До сих пор я пытался просто поставить pop() в конце, но это просто удаляет все элементы. – mrQWERTY
Поскольку у меня возникли проблемы с пониманием проблемы, позвольте мне попытаться перефразировать то, что вы пытаетесь сделать. 'stack' - это список узлов в дереве, предназначенный для представления пути к целевому узлу. Вы обнаруживаете узел на полной глубине в первом проходе. Когда вы посещаете узел, вы добавляете его в список, но если вы вернетесь с этого узла, не найдя цель, вы удалите этот узел из списка, так как это не правильный путь вниз. Как только вы найдете цель, вернитесь полностью, не удаляя узлы, и у вас будет путь. Это звучит правильно? – James