【发布时间】:2019-06-26 15:48:27
【问题描述】:
我正在练习将 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
我喜欢反复解决这类问题,因为它非常直观。但在大多数情况下,我也会被要求实施递归解决方案。我知道数据结构堆栈类似于递归函数的行为方式,但我仍然难以将迭代函数转换为递归函数。有什么建议吗?
【问题讨论】:
-
与您的问题无关:我不喜欢您的解决方案的一件事是它将您的广度优先搜索代码与您的链接列表代码合并。如果你想使用广度优先搜索来创建一个数组怎么办?或者您想创建一个链表,但使用深度优先搜索?您没有很好地将问题的这两个原本不相关的方面模块化