我有一個段樹保存數據範圍的數據(數據結構選擇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