leetcode589-二叉樹遞迴-迭代
阿新 • • 發佈:2018-11-09
題目:N-ary Tree Preorder Traversal前序遍歷N叉樹
遞迴解法
就是迴圈呼叫preorder函式來實現遞迴,程式碼:
class Solution(object): #遞迴解法
def preorder(self, root):
"""
:type root: Node
:rtype: List[int]
"""
res = []
if not root:
return res
res.append(root. val)
for child in root.children:
res.extend(self.preorder(child))
return res
迭代解法
用棧來實現,
class Solution(object): #迭代解法
def preorder(self, root):
"""
:type root: Node
:rtype: List[int]
"""
if not root: return []
stack = []
stack.append(root)
res=[]
while stack:
node = stack.pop()
res.append(node.val)
stack.extend(node.children[::-1])
return res
遞迴和迭代的對比:
遞迴可以使程式碼更清晰,但是由於遞迴需要系統堆疊,所以空間消耗要比非遞迴程式碼大很多,而且,遞迴深度太大的話可能會導致系統資源不夠用。
而迭代雖然效率高,執行時間只因迴圈次數增加而增加,沒什麼額外開銷,空間上也沒有什麼增加,但缺點就是不容易理解,編寫複雜問題時困難。
參考:https://blog.csdn.net/fuxuemingzhu/article/details/81021950
https://www.cnblogs.com/candyming/archive/2011/12/04/2275383.html