[路飞] 45——leetcode -107. 二叉树的层序遍历 II

115 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

107. 二叉树的层序遍历 II

题目分析

给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)

思路讲解

只需要将从上到下打印二叉树 II的结果进行反转即可

示例

image.png

示例1:
输入: root = [3,9,20,null,null,15,7]
输出: [[15,7],[9,20],[3]]

示例2:
输入: root = [1]
输出: [[1]]

示例3:
输入: root = []
输出: []

代码

/*
 * @lc app=leetcode.cn id=107 lang=javascript
 *
 * [107] 二叉树的层序遍历 II
 */

// @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[][]}
 */
// 思路:
// 这道题是从上到下打印二叉树 II的结果数组,进行反转得到
// 因为层序遍历是从下到上,上一题是从上到下遍历,因此这道题的结果就是将上一道题的结果反转得到
var levelOrderBottom = function(root) {
  let ans = []
  getResult(root, 0, ans)
  // 注意:反转(返回其节点值 自底向上的层序遍历)
  for (let i = 0, j = ans.length - 1; i < j; i++, j--) {
    [ans[i], ans[j]] = [ans[j], ans[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