Leetcode - binary-tree-zigzag-level-order-traversal
https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).
For example:
Given binary tree [3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
return its zigzag level order traversal as:
[ [3], [20,9], [15,7] ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | /** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ func zigzagLevelOrder(root *TreeNode) [][]int { if root == nil { return [][]int{} } queue := []*TreeNode{root} result := [][]int{} level := 0 for len(queue) != 0 { size := len(queue) levelResult := []int{} for i := 0 ; i < size; i++ { node := queue[i] levelResult = append(levelResult, node.Val) if node.Left != nil { queue = append(queue, node.Left) } if node.Right != nil { queue = append(queue, node.Right) } } level++ if level% 2 == 0 { levelResult = reverse(levelResult) } result = append(result, levelResult) queue = queue[size:] } return result } func reverse(nums []int) []int { size := len(nums) for i := 0 ; i < size/ 2 ; i++ { nums[i], nums[size- 1 -i] = nums[size- 1 -i], nums[i] } return nums } |