Я практиковался в вопросе об интервью по преобразованию BST в дважды LinkedList.
Дерево:
станет
Метод, который я использовал, заключался в использовании стека и некоторых манипуляций с указателями при обходе дерева по порядку.
Ниже приведен мой код:
def treeToDoublyList(self, root):
"""
:type root: Node
:rtype: Node
"""
if not root:
return
dummy = Node(-1, None, None)
prev = dummy
stack = []
n = root
while stack or n:
while n:
stack.append(n)
n = n.left
n = stack.pop()
n.left = prev
prev.right = n
prev = n
n = n.right
dummy.right.left = prev
prev.right = dummy.right
return dummy.right
Мне нравится решатьпроблема такого рода итеративно, потому что она очень интуитивно понятна.Но в большинстве случаев меня также попросят реализовать рекурсивное решение.Я знаю, что стек структуры данных похож на поведение рекурсивных функций, но у меня все еще есть трудности с преобразованием итеративной в рекурсивную.Любые советы?