589. N叉樹的前序遍歷(Python)

題目

難度:★★☆☆☆
類型:樹

給定一個 N 叉樹,返回其節(jié)點值的前序遍歷。

例如,給定一個 3叉樹 :

N叉樹

返回其前序遍歷: [1,3,5,6,2,4]。

說明: 遞歸法很簡單,你可以使用迭代法完成此題嗎?

解答

方案1:遞歸

class Solution:
    def preorder(self, root):

        def pre_order(node, l):
            """
            N叉樹的前序遍歷
            :param node: 輸入結(jié)點
            :param l: 結(jié)果列表
            :return:
            """
            if node:                            # 如果輸入結(jié)點不為空
                l.append(node.val)              # 添加結(jié)點值到結(jié)果列表
                for child in node.children:     # 對每一棵子樹做前序遍歷
                    pre_order(child, l)

        res = []
        pre_order(root, res)
        return res

上述方法的緊湊寫法:

class Solution:
    def preorder(self, root):        
        return [root.val]+sum([self.preorder(i) for i in root.children], []) if root else []

方案2:迭代

class Solution:
    def preorder(self, root):
        if root is None:
            return []
        stack = [root]
        res = []
        while len(stack):
            node = stack.pop()
            res.append(node.val)
            temp = []
            for i in node.children:
                temp.append(i)
            if len(temp):
                temp.reverse()
                stack.extend(temp)
        return res

如有疑問或建議,歡迎評論區(qū)留言~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容