关于go:Leetcode专题103二叉树的锯齿形层序遍历

36次阅读

共计 615 个字符,预计需要花费 2 分钟才能阅读完成。

leetcode 链接:
https://leetcode.cn/problems/binary-tree-zigzag-level-order-t…
解题思路:
应用深度优先搜寻(DFS)的形式遍历二叉树,并应用一个二维数组 res 来保留遍历后果。在遍历过程中,对于每个节点,首先判断它所在的层数是否曾经在 res 中存在,如果不存在则新建一个空数组退出 res 中。而后依据节点所在的层数是否为偶数,将节点的值插入到 res[depth] 的开端或结尾。最初递归遍历节点的左右子树,同时将深度 depth 加 1。最终返回 res 即为锯齿形档次遍历后果。

func zigzagLevelOrder(root *TreeNode) [][]int {res := [][]int{}

    var dfs func(*TreeNode, int)

    dfs = func(node *TreeNode, depth int){
        if node ==nil{return}
        if len(res)<=depth{res = append(res, []int{})
        }

        if depth&1==0{res[depth] = append(res[depth], node.Val)
        } else{res[depth] = append([]int{node.Val}, res[depth]...)
        }

        dfs(node.Left, depth+1)
        dfs(node.Right, depth+1)

    }

    dfs(root, 0)
    return res
}

正文完
 0