[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
2h−1 的方式计算,
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的主要内容,如果未能解决你的问题,请参考以下文章
[JavaScript 刷题] 树 - 完全二叉树的节点个数, leetcode 222