1. 程式人生 > >leetcode589-二叉樹遞迴-迭代

leetcode589-二叉樹遞迴-迭代

題目: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