题目描述
给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
eg: 给定二叉树 [3,9,20,null,null,15,7]
3
/ \
9 20
/ \
15 7
[
[3],
[20,9],
[15,7]
]
思路分析
这道题的思路和之前二叉树递归遍历思路一致,我们来再次利用递归分析的方法分析一下:
1、 函数意义:将二叉树的同层数据都放在一个数组中输出
2、 边界条件: 二叉树为空
3、递归过程: 二叉树进行遍历输出,同层的放在一个数组(因此我们要先实现一个二叉树的输出)
实现完毕之后,需要按照锯齿形输出,因此找到2的倍数位置的节点,将对应数组反转,输出为最终结果。
代码实现
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
const __zigzagLevelOrder = (root, res, index) => {
if (!root) return;
res[index] ? res[index].push(root.val) : (res[index] = [root.val]);
__zigzagLevelOrder(root.left, res, index + 1);
__zigzagLevelOrder(root.right, res, index + 1);
};
/**
* @param {TreeNode} root
* @return {number[][]}
*/
var zigzagLevelOrder = function (root) {
let res = [];
__zigzagLevelOrder(root, res, 0);
for (let i = 1; i < res.length; i += 2) {
res[i] = res[i].reverse();
}
return res;
};