[JavaScript 刷题] 搜索 - 二叉树的层序遍历, leetcode 102

Posted GoldenaArcher

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[JavaScript 刷题] 搜索 - 二叉树的层序遍历, leetcode 102相关的知识,希望对你有一定的参考价值。

[javascript 刷题] 搜索 - 二叉树的层序遍历, leetcode 102

github repo 地址: https://github.com/GoldenaArcher/js_leetcode,Github 的目录 大概 会更新的更勤快一些。

题目地址:102. Binary Tree Level Order Traversal

题目如下:

Given the root of a binary tree, return the level order traversal of its nodes’ values. (i.e., from left to right, level by level).

解题思路

就……挺简单的一个 BFS 的二叉树遍历,难度不是很大。

就题目有点误我,刚开始以为传进去的是个数组,写完了提交直接报错。后来没办法,只好自己重新把数组修改成 TreeNode 的结构。

虽然这里是搜索的专辑,不过还是提一下,二叉树的话是可以使用数组实现的,就像题目中一样:

root = [3,9,20,null,null,15,7]

是可以直接转换成二叉树:

这里贴一下用数组的方式解题的答案

var levelOrder = function (root) 
  if (root.length === 0) return [];

  const degrees = [[root[0]]];
  let curr = 1;

  while (2 ** degrees.length < root.length) 
    const degreeSize = 2 ** degrees.length;
    degrees.push(root.slice(curr, curr + degreeSize));
    curr += degreeSize;
  

  return degrees;
;

console.log(levelOrder([3, 9, 20, null, null, 15, 7]));

本质上来说就是通过 2 ** n 的方式确定长度,这也是因为二叉树结点的数量可以通过 2 h − 1 2^h - 1 2h1 的方式计算, h h h 为树的高度。

使用 JavaScript 解题

TreeNode 这个太坑了,所以测试代码直接就放进来了,如果想要自己修改一下测试代码的话 cv 也稍微容易些……

当然,因为实现,只要是 undefined 都会改成 null,所以传不传值的问题都不大……

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 levelOrder = function (root) 
  if (root === null) return [];

  const queue = [root];
  const res = [];

  while (queue.length > 0) 
    let size = queue.length;
    const currDegree = [];
    for (let i = 0; i < size; i++) 
      const node = queue.shift();

      currDegree.push(node.val);

      if (node.left) 
        queue.push(node.left);
      
      if (node.right) 
        queue.push(node.right);
      
    

    res.push(currDegree);
  

  return res;
;

const nine = new TreeNode(9, null, null);
const fift = new TreeNode(15, undefined, undefined);
const seven = new TreeNode(7, undefined, undefined);
const twty = new TreeNode(20, fift, seven);
const root = new TreeNode(3, nine, twty);

console.log(levelOrder(root));

以上是关于[JavaScript 刷题] 搜索 - 二叉树的层序遍历, leetcode 102的主要内容,如果未能解决你的问题,请参考以下文章

二叉树刷题篇(11) 二叉搜索树的最小绝对差与众数

二叉树刷题篇(完) 二叉搜索树的修剪构造与转换

[JavaScript 刷题] 树 - 完全二叉树的节点个数, leetcode 222

万字长文!二叉树入门和刷题看这篇就够了!

[JavaScript 刷题] 树 - 二叉树的序列化与反序列化, leetcode 297

[JavaScript 刷题] 树 - 二叉树的序列化与反序列化, leetcode 297