老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

如何理解二叉樹的層次遍歷

本篇文章給大家分享的是有關如何理解二叉樹的層次遍歷,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

創新互聯公司自2013年起,是專業互聯網技術服務公司,擁有項目網站制作、成都做網站網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元奎屯做網站,已為上家服務,為奎屯各地企業和個人服務,聯系電話:18982081108

算法:

樹的層次遍歷是樹的基本操作之一,包括二叉樹的層次遍歷,多叉樹的層次遍歷,以及二叉樹層次遍歷的變形題目,層次遍歷+每一層的節點的翻轉等操作。

對于這類題目,典型算法就是先將樹按照層次存入數組當中,然后統一對每一層的數據進行數據處理。

題目1:

102. 二叉樹的層序遍歷

如何理解二叉樹的層次遍歷

代碼實現:

/** * Definition for a binary tree node. * type TreeNode struct { *     Val int *     Left *TreeNode *     Right *TreeNode * } */ /*  方法1:非遞歸操作 */ /*func levelOrder(root *TreeNode) [][]int {    if root == nil {        return nil    }    var stack []*TreeNode    var result [][]int    stack = append(stack,root)    for {        if len(stack) == 0 {            break;        }        res,stack1 := helper(stack)        if len(res) != 0 {            result = append(result,res)        }        stack = stack1    }    return result}func helper(stack []*TreeNode)(res []int, stackRes []*TreeNode){    if len(stack) == 0{        return    }       for i:=0;i        node := stack[i]        if node == nil {            continue        }        res = append(res,node.Val)           stackRes = append(stackRes,node.Left)        stackRes = append(stackRes,node.Right)    }        return}*//*解法:隊列來操作,樹的層次遍歷,從左到右遍歷樹的每一層存入對應的數組即可*//*方法2:遞歸操作利用二叉樹的先序遍歷方法,也就是先訪問根節點,在訪問做左孩子,然后訪問右孩子。*/func levelOrder(root *TreeNode) [][]int {    return preOrder(root, 0, [][]int{})}
func preOrder(root *TreeNode, level int, res [][]int) [][]int  {    if root == nil {        return res    }    // 1.根節點的處理    // 這里因為level從0開始計算的緣故,len放進去值之后就是1,所以==的時候,便是是新的一層開始    if level == len(res) {        res = append(res,[]int{root.Val})    } else {        res[level] = append(res[level],root.Val)    }    // 2.左孩子節點的處理    res = preOrder(root.Left,level+1,res)    // 3.右孩子節點的處理    res = preOrder(root.Right,level+1,res)    return res}

執行結果:

如何理解二叉樹的層次遍歷

題目2:

如何理解二叉樹的層次遍歷

https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/

代碼實現:

/** * Definition for a binary tree node. * type TreeNode struct { *     Val int *     Left *TreeNode *     Right *TreeNode * } */
func levelOrderBottom(root *TreeNode) [][]int {    r := [][]int{}    order(root,0,&r)    for i,j:= 0, len(r)-1;i        r[i],r[j] = r[j],r[i]        i++        j--    }    return r}func order(root *TreeNode,level int,res *[][]int)  {    if root == nil {        return    }    if len(*res)-1 < level {        *res = append(*res,[]int{root.Val})    } else {        (*res)[level] = append((*res)[level],root.Val)    }        order(root.Left,level+1,res)    order(root.Right,level+1,res)    return }

執行結果:

如何理解二叉樹的層次遍歷

題目3:

https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal/

如何理解二叉樹的層次遍歷

代碼實現:

/** * Definition for a binary tree node. * type TreeNode struct { *     Val int *     Left *TreeNode *     Right *TreeNode * } */func zigzagLevelOrder(root *TreeNode) [][]int {    if root == nil {        return nil    }    res := [][]int{}    levelOrder(root,0, &res)    for i:=0; i< len(res); i++ {         if i%2 == 1{            j,k:=0,len(res[i])-1            for j < k{                res[i][j],res[i][k] = res[i][k],res[i][j]                 j++                k--            }        }    }    return res}
func levelOrder(root *TreeNode, l int, res *[][]int) {    if root == nil {        return    }    if len(*res)-1 < l  {        *res = append(*res,[]int{root.Val})    } else {        (*res)[l] = append((*res)[l],root.Val)    }    levelOrder(root.Left,l+1,res)    levelOrder(root.Right,l+1,res)    return }// 需要: 先按照層次去遍歷存儲,然后統一的做整理,調整需要轉換的對應層次

結果輸出:

如何理解二叉樹的層次遍歷

題目4.

https://leetcode-cn.com/problems/n-ary-tree-level-order-traversal/

如何理解二叉樹的層次遍歷

代碼實現:

/** * Definition for a Node. * type Node struct { *     Val int *     Children []*Node * } */
func levelOrder(root *Node) [][]int {    if root == nil {        return nil    }    res := [][]int{}    levelOrderOk(root,0,&res)    return res}
func levelOrderOk(root *Node,l int, res *[][]int){    if len(*res)-1 < l {        *res = append(*res,[]int{root.Val})    } else {        (*res)[l] = append((*res)[l],root.Val)    }    for _,t := range root.Children {        levelOrderOk(t,l+1,res)    }    return }

執行結果:

如何理解二叉樹的層次遍歷

以上就是如何理解二叉樹的層次遍歷,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注創新互聯行業資訊頻道。


網頁標題:如何理解二叉樹的層次遍歷
分享鏈接:http://www.xueling.net.cn/article/gjjopo.html
主站蜘蛛池模板: 日产国产精品亚洲系列的特点 | 亚洲丁香婷婷综合久久 | av熟女人妻一级毛片 | 中文字幕无码中文字幕有码在线 | 少妇无套进入10p | 亚洲人成网站在线播放无码 | 亚洲啊啊啊啊啊 | 国产精品人妖ts系列视频 | 国产69堂无码一区二区三区 | 2020最新久久久视精品爱 | 国产福利片在线观看 | 国产麻豆aⅴ尤物网站尤物 中国少妇XXXX做受 | 91情趣视频 | 国产在线观看免费人成视频 | www.欧美黄 | 99热国内精品 | 大胆日本无码一区二区 | 国产综合18久久久久久 | 色婷婷久久一区二区三区麻豆 | 国产精品1卡2卡3卡4卡 | 日本三级黄色录像 | 久久www人成免费产片 | 狠狠爱免播放器 | 在线高清视频免费观看视频 | 国产性生活毛片 | 天天看天天做天天爽 | 污黄啪啪网18以下勿进 | 国产精品亚洲第一 | 九九热线视频只有这里最精品 | 久热综合在线亚洲精品 | 国产成人18黄网站免费观看 | 真人一级毛片免费完整视频 | 成人在线观看免费精品 | 亚洲欧美另类激情综合区 | 成人午夜爽爽爽免费视频 | 女人毛片免费观看 | 四虎影视一区二区 | 日韩高清中文字幕 | 国产成人无码A区视频 | 色窝窝免费播放视频在线 | 麻豆网站视频 |