我有一个段树保存数据范围的数据(数据结构选择here)。代码如下:超过Python树遍历递归深度
class SegmentTree:
def __init__(self, N):
def _init(b, e):
if b is e:
data = foo() # No dependency
return Node(b, e, data, None, None)
else:
mid = (b + e)/2
L = _init(b, mid)
R = _init(mid + 1, e)
data = foo() #Data depends on L and R
return Node(b, e, data, L, R)
self.root = _init(1, N)
对于N在300附近,最大递归深度超过错误,此失败。有没有办法迭代创建树而不是递归?
是的,我想这样做,但我需要在(递归)创建L和R节点之后在当前节点上执行我的处理。我不确定在何处/如何将当前节点存储以供将来处理 - 在单独的堆栈上? – knite
那么通常有更好的方法来实现树遍历(尽管它们可以通过指针旋转和东西变得复杂)而不是使用“栈”。毕竟,如果你在堆上使用堆栈,你实际上并没有节省太多空间(除了一个常数因子,因为你需要节省更少的状态) – Voo