Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
题目分析
给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)
思路讲解
只需要将从上到下打印二叉树 II的结果里面索引为奇数的数组中的元素反转即可。
索引是奇数数组中每个元素反转,偶数不变
示例
示例1:
输入: root = [3,9,20,null,null,15,7]
输出: [[3],[20,9],[15,7]]
示例2:
输入: root = [1]
输出: [[1]]
示例3:
输入: root = []
输出: []
代码
/*
* @lc app=leetcode.cn id=103 lang=javascript
*
* [103] 二叉树的锯齿形层序遍历
*/
// @lc code=start
/**
* 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)
* }
*/
/**
* @param {TreeNode} root
* 这道题与从上到下打印很相近,不同的就是将从上到下的结果,进行判断
* 索引为奇数的数组中的元素进行反转
* 索引为偶数的不变
* @return {number[][]}
*/
var zigzagLevelOrder = function(root) {
let ans = []
getResult(root, 0, ans)
// 索引判断
for (let k = 1; k < ans.length; k+=2) {
for (let i = 0, j = ans[k].length - 1; i < j; i++, j--) {
[ans[k][i], ans[k][j]] = [ans[k][j], ans[k][i]]
}
}
return ans
};
// 封装函数
var getResult = function (root, k, ans) {
if (!root) return null
if (k === ans.length) ans.push(new Array())
ans[k].push(root.val)
getResult(root.left, k + 1, ans)
getResult(root.right, k + 1, ans)
}
// @lc code=end