力扣-二叉树的锯齿形遍历

120 阅读1分钟

题链接:leetcode-cn.com/problems/bi…

题解: 同类型的二叉树遍历都可以使用一套思路 1、定义一个元组以及数组打印遍历的存储空间,假设为result 2、遍历元组,每次弹出头部,并循环处理,可以得到当前层 3、将left,right在循环中加入元组,因为元组的长度是动态的,需要定一个一个存储空间,每次清空 4、将当前层push到之前定义好的数组中,我们可以做一个计数,每次进入while就给计数 +1,假设它从0开始,我们就得到奇数与偶数,判断奇数或者偶数,判断是否需要在添加的时候进行反转 5、返回最早之前定义号的result

var zigzagLevelOrder = function(root) {
    if(!root) return []
    const cur = [root]
    const result = []
    let n = 0
    while(cur.length) {
        const temp = []
        ++n
        for(let i = cur.length; i > 0; i--) {
            const head = cur.shift()
            temp.push(head.val)
            head.left && cur.push(head.left)
            head.right && cur.push(head.right)
        }
        if(n%2 === 0)  {
            result.push(temp.reverse())
        } else {
            result.push(temp)
        }
    }
    return result
};