题目
给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
例如:
给定二叉树 [3,9,20,null,null,15,7],
3<br /> / \<br /> 9 20<br /> / \<br /> 15 7<br />返回锯齿形层序遍历如下:
[
[3],
[20,9],
[15,7]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解
1.层序遍历
显然,用层序遍历最简单
var zigzagLevelOrder = function (root) {
// 层序遍历
if (!root) {
return []
}
const queue = [root],
res = []
let flag = -1
while (queue.length > 0) {
let len = queue.length
let temp = []
flag = -flag
while (len > 0) {
const node = queue.pop()
temp.push(node.val)
if (node.left) {
queue.unshift(node.left)
}
if (node.right) {
queue.unshift(node.right)
}
len--
}
if (flag > 0) {
res.push(temp)
} else {
// console.log(temp, temp.reverse())
res.push(temp.reverse())
}
}
return res
};
2.优化
方向已知,temp长度已知,直接在temp数组里面赋值就行
