最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

N叉樹的三種遍歷(層次遍歷、前序遍歷、后序遍歷)

 更新時間:2022年04月14日 16:00:46   作者:BlackMan_阿偉  
本文主要介紹了N叉樹的三種遍歷(層次遍歷、前序遍歷、后序遍歷),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

題目鏈接:

590.N叉樹的后序遍歷

429.N叉樹的層序遍歷

598.N叉樹的前序遍歷

1、層次遍歷

"""
# 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、前序遍歷

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

"""
# 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、后序遍歷

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

"""
# 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 []
 
        #后續(xù)遍歷是先遍歷一個節(jié)點的孩子節(jié)點,在去遍歷這個節(jié)點本身
        
        #遞歸
        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叉樹和二叉樹的差別不是很多,唯一的差別就是孩子很多不需要去判斷左右孩子了。

到此這篇關于N叉樹的三種遍歷(層次遍歷、前序遍歷、后序遍歷)的文章就介紹到這了,更多相關N叉樹的三種遍歷內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • vscode和cmake編譯多個C++文件的實現(xiàn)方法

    vscode和cmake編譯多個C++文件的實現(xiàn)方法

    這篇文章主要介紹了vscode和cmake編譯多個C++文件的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • 掌握C++編程中反斜杠續(xù)行符的使用方法

    掌握C++編程中反斜杠續(xù)行符的使用方法

    這篇文章主要介紹了掌握C++編程中反斜杠續(xù)行符的使用方法,包括取反斜杠的本意的方法等基本知識點,需要的朋友可以參考下
    2016-01-01
  • C++超詳細講解運算符重載

    C++超詳細講解運算符重載

    本文包括了對C++類的6個默認成員函數(shù)中的賦值運算符重載和取地址和const對象取地址操作符的重載。運算符是程序中最最常見的操作,例如對于內(nèi)置類型的賦值我們直接使用=賦值即可,因為這些編譯器已經(jīng)幫我們做好了,但是對象的賦值呢?能直接賦值嗎
    2022-06-06
  • C語言開源庫iniparser解析ini文件的方法

    C語言開源庫iniparser解析ini文件的方法

    INI(Initialization?File)文件是一種簡單直觀的數(shù)據(jù)存儲格式,常用于配置應用程序的初始化設置,使用?iniparser?庫的應用程序可以很方便地讀取和解析INI文件中的配置信息,大大簡化了對配置文件的處理工作,降低了程序的開發(fā)復雜度,感興趣的的朋友跟隨小編一起看看吧
    2024-04-04
  • C++跳轉語句之Goto對變量定義的影響詳解

    C++跳轉語句之Goto對變量定義的影響詳解

    goto語句也被稱為無條件轉移語句,這篇文章主要介紹了C++跳轉語句之Goto對變量定義的影響,文中通過示例代碼解文字介紹的很詳細,相信對大家的理解和學習具有一定的參考借鑒價值,有需要的朋友們下面跟著小編一起來學習學習吧。
    2016-11-11
  • C語言中棧和隊列實現(xiàn)表達式求值的實例

    C語言中棧和隊列實現(xiàn)表達式求值的實例

    這篇文章主要介紹了C語言中棧和隊列實現(xiàn)表達式求值的實例的相關資料,這里主要是對數(shù)據(jù)結構中棧和隊列的理解和應用,需要的朋友可以參考下
    2017-08-08
  • C++智能指針shared_ptr與weak_ptr的實現(xiàn)分析

    C++智能指針shared_ptr與weak_ptr的實現(xiàn)分析

    shared_ptr是一個標準的共享所有權的智能指針,允許多個指針指向同一個對象,定義在 memory 文件中,命名空間為 std,這篇文章主要介紹了C++ 中 shared_ptr weak_ptr,需要的朋友可以參考下
    2022-09-09
  • C語言中對字母進行大小寫轉換的簡單方法

    C語言中對字母進行大小寫轉換的簡單方法

    這篇文章主要介紹了C語言中對字母進行大小寫轉換的簡單方法,是C語言入門學習中的基礎知識,需要的朋友可以參考下
    2015-08-08
  • C語言實現(xiàn)學生管理系統(tǒng)

    C語言實現(xiàn)學生管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)學生管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • C++圖文并茂輕松進階面向對象

    C++圖文并茂輕松進階面向對象

    面向對象中對象是指具體的某一個事物,這些事物的抽象就是類,類中包含數(shù)據(jù)(成員變量)和動作(成員方法),接下來讓我們一起詳細了解
    2022-04-04

最新評論

凤阳县| 和林格尔县| 南川市| 上饶市| 大同市| 万安县| 呼玛县| 武宣县| 库车县| 行唐县| 新建县| 黄平县| 葵青区| 托里县| 容城县| 望江县| 湘潭县| 漯河市| 舒城县| 柏乡县| 化德县| 克东县| 朝阳区| 巢湖市| 晋州市| 丹寨县| 龙口市| 竹山县| 东光县| 开平市| 桐城市| 石泉县| 汝州市| 贵德县| 沛县| 伊吾县| 固始县| 天镇县| 和平县| 区。| 郯城县|