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

二叉树的锯齿形层序遍历

题目描述:

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

例如:
给定二叉树 [3,9,20,null,null,15,7],

3

/
9 20
/
15 7
返回锯齿形层序遍历如下:

[
[3],
[20,9],
[15,7]
]

思路:

跟102很相似,用队列来做,就是输入到arr的时候输入次序

代码:

func zigzagLevelOrder(root *TreeNode) [][]int {
    var arr [][]int
    if root==nil{
        return arr
    }
    qu:=[]*TreeNode{root}
    for level:=0;len(qu)>0;level++{
        arr=append(arr,[]int{})
        p:=[]*TreeNode{}
        for i:=0;i<len(qu);i++{
            if qu[i].Left!=nil{
                p=append(p,qu[i].Left)
            }
            if qu[i].Right !=nil{
                p=append(p,qu[i].Right)
            }
        }
        if level%2==1{
            for j:=len(qu)-1;j>=0;j--{
                arr[level]=append(arr[level],qu[j].Val)
            }
        }else{
            for j:=0;j<len(qu);j++{
                arr[level]=append(arr[level],qu[j].Val)
            }
        }
        qu=p
    }
    return arr
}

代码效率:

执行用时:0 ms, 在所有 Go 提交中击败了100.00%的用户
内存消耗:2.5 MB, 在所有 Go 提交中击败了79.52%的用户


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!