103. 二叉树的锯齿形层序遍历

112 阅读1分钟

题目:
给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。

解法:
隔行反转,或者有双端队列也行

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func zigzagLevelOrder(root *TreeNode) [][]int {
    ans := make([][]int, 0)
    flag := 1

    list := make([]*TreeNode, 0)
    if root != nil {
        list = append(list, root)
    }

    for len(list) != 0 {
        length := len(list)
        arr := make([]int, 0)

            for i := 0; i < length; i ++ {
                arr = append(arr, list[i].Val)
                if list[i].Left != nil {
                    list = append(list, list[i].Left)
                }
                if list[i].Right != nil {
                    list = append(list, list[i].Right)
                }
            }
        
        if flag == -1 {
            swap(arr)
        }
        ans = append(ans, arr)

        list = list[length:]
        flag = -1 * flag
    }
    return ans
}

func swap(arr []int){
    i, j := 0, len(arr) - 1
    for ; i < j; i, j = i + 1, j - 1 {
        arr[i], arr[j] = arr[j], arr[i]
    }
}