From f1564fe56da9b664be20b49fd37c3813e2ccdfca Mon Sep 17 00:00:00 2001 From: yi-ge Date: Wed, 13 May 2020 13:55:12 +0800 Subject: [PATCH] =?UTF-8?q?add:=20=E4=BA=8C=E5=8F=89=E6=A0=91=E7=9A=84?= =?UTF-8?q?=E5=B1=82=E5=BA=8F=E9=81=8D=E5=8E=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 ++++ src/tree/binary-tree-level-order-traversal.js | 28 +++++++++++++++++++ .../binary-tree-level-order-traversal.test.js | 11 ++++++++ 3 files changed, 44 insertions(+) create mode 100644 src/tree/binary-tree-level-order-traversal.js create mode 100644 test/tree/binary-tree-level-order-traversal.test.js diff --git a/README.md b/README.md index afed3c5..59ff44b 100644 --- a/README.md +++ b/README.md @@ -353,6 +353,11 @@ LeetCode 与 LintCode 解题记录。此为个人练习仓库,代码中对重 - LeetCode 572. 另一个树的子树 - LintCode 1165. 另一个树的子树 +- [二叉树的层序遍历](src/tree/binary-tree-right-side-view.js) + + - LeetCode 102. 二叉树的层序遍历 + - LintCode 69. 二叉树的层次遍历 + ## 链表 - [合并K个排序链表](src/list/merge-k-sorted-lists.js) diff --git a/src/tree/binary-tree-level-order-traversal.js b/src/tree/binary-tree-level-order-traversal.js new file mode 100644 index 0000000..bc4d46b --- /dev/null +++ b/src/tree/binary-tree-level-order-traversal.js @@ -0,0 +1,28 @@ +/** + * Definition for a binary tree node. + * function TreeNode(val) { + * this.val = val; + * this.left = this.right = null; + * } + */ +/** + * @param {TreeNode} root + * @return {number[][]} + */ +export const levelOrder = function (root) { + const res = [] + const queue = [root] + while (queue.length) { // BFS + const tmp = [] + const leave = queue.length // 记录这一层有几个 + for (let i = 0; i < leave; i++) { // 一次性把固定个数的队列执行完 + const node = queue.shift() + if (node.left) queue.push(node.left) + if (node.right) queue.push(node.right) + tmp.push(node.val) + } + res.push(tmp) + } + + return res +} diff --git a/test/tree/binary-tree-level-order-traversal.test.js b/test/tree/binary-tree-level-order-traversal.test.js new file mode 100644 index 0000000..208093f --- /dev/null +++ b/test/tree/binary-tree-level-order-traversal.test.js @@ -0,0 +1,11 @@ +import { levelOrder } from '../../src/tree/binary-tree-level-order-traversal' +import Tree from './Tree.js' + +test('二叉树的层序遍历', () => { + const source = [3, 9, 20, null, null, 15, 7] + expect(levelOrder(Tree.arrToTree(source))).toEqual([ + [3], + [9, 20], + [15, 7] + ]) +})