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}