我正在练习将BST转换为双链表的采访问题。
树:
将成为
我使用的方法是使用堆栈并按顺序遍历树时进行一些指针操作。
下面是我的代码:
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
我喜欢迭代式地解决此类问题,因为它非常直观。但是在大多数情况下,我还将被要求实施一个递归解决方案。我知道数据结构堆栈类似于递归函数的行为,但是在将迭代函数转换为递归函数时仍然遇到困难。有提示吗?
答案 0 :(得分:1)
几乎每个递归函数都可以围绕“基本情况”和“递归情况”进行设计。
现在,您需要一种合并结果的方法。您可以:
哪个更有意义取决于应用程序,但是其中一个有效。
您可能需要考虑不同方法之间的权衡;如果我在采访你,我会问他们。