91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python N叉樹的三種遍歷怎么實現

發布時間:2022-04-15 09:11:35 來源:億速云 閱讀:404 作者:iii 欄目:開發技術

這篇文章主要介紹“python N叉樹的三種遍歷怎么實現”,在日常操作中,相信很多人在python N叉樹的三種遍歷怎么實現問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”python N叉樹的三種遍歷怎么實現”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

1、層次遍歷

python N叉樹的三種遍歷怎么實現

"""
# Definition for a Node.
class Node:
    def __init__(self, val=None, children=None):
        self.val = val
        self.children = children
"""
 
class Solution:
    def levelOrder(self, root: 'Node') -> List[List[int]]:
        if not root:
            return []
 
        queue = collections.deque()
        queue.append(root)
        res = []
 
        while queue:
            size = len(queue)
            temp = []
            for _ in range(size):
                node = queue.popleft()
                temp.append(node.val)
                if node.children:
                    queue.extend(node.children)
            res.append(temp)
        
        return res

2、前序遍歷

前序遍歷就是從左至右,先根后孩子;遞歸比較簡單,迭代法的話需要借助一個輔助棧,把每個節點的孩子都壓入棧中;

python N叉樹的三種遍歷怎么實現

"""
# Definition for a Node.
class Node:
    def __init__(self, val=None, children=None):
        self.val = val
        self.children = children
"""
 
class Solution:
    def preorder(self, root: 'Node') -> List[int]:
        if not root:
            return []
        
        #迭代法
        stack, output = [root, ], []            
        while stack:
            root = stack.pop()
            output.append(root.val)
            stack.extend(root.children[::-1])
                
        return output
 
        #遞歸法
        res = []
 
        def helper(root):
            if not root:
                return 
            res.append(root.val)
            for children in root.children:
                helper(children)
        
        helper(root)
 
        return res

3、后序遍歷

在后序遍歷中,我們會先遍歷一個節點的所有子節點,再遍歷這個節點本身。例如當前的節點為 u,它的子節點為 v1, v2, v3 時,那么后序遍歷的結果為 [children of v1], v1, [children of v2], v2, [children of v3], v3, u,其中 [children of vk] 表示以 vk 為根節點的子樹的后序遍歷結果(不包括 vk 本身)。我們將這個結果反轉,可以得到 u, v3, [children of v3]', v2, [children of v2]', v1, [children of v1]',其中 [a]' 表示 [a] 的反轉。此時我們發現,結果和前序遍歷非常類似,只不過前序遍歷中對子節點的遍歷順序是 v1, v2, v3,而這里是 v3, v2, v1。

python N叉樹的三種遍歷怎么實現

"""
# Definition for a Node.
class Node:
    def __init__(self, val=None, children=None):
        self.val = val
        self.children = children
"""
 
class Solution:
    def postorder(self, root: 'Node') -> List[int]:
        if not root:
            return []
 
        #后續遍歷是先遍歷一個節點的孩子節點,在去遍歷這個節點本身
        
        #遞歸
        result = []
        def postHelper(root):
            if not root:
                return None
            children = root.children
            for child in children:
                postHelper(child)
            result.append(root.val)
 
        postHelper(root)
        return result
 
 
 
        #迭代法:輔助棧
        res = []
        stack = [root,]
 
        while stack:
            
            node = stack.pop()
            if node is not None:
                res.append(node.val)
            for children in node.children:
                stack.append(children)
        
        return res[::-1]

總結:N叉樹和二叉樹的差別不是很多,唯一的差別就是孩子很多不需要去判斷左右孩子了。

到此,關于“python N叉樹的三種遍歷怎么實現”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

榕江县| 阿拉善右旗| 佛坪县| 阜新| 绍兴市| 屏边| 东海县| 台山市| 桃园市| 财经| 诸暨市| 晋城| 乌拉特中旗| 静安区| 林西县| 逊克县| 化德县| 广西| 驻马店市| 海林市| 红河县| 赤壁市| 东平县| 巴彦县| 班戈县| 阿城市| 丹巴县| 阿尔山市| 元江| 盐城市| 陇川县| 田阳县| 安徽省| 游戏| 大名县| 奉贤区| 璧山县| 隆子县| 高雄市| 固安县| 阿克苏市|