From 8f84fc8c66d8a54adb23caaff78d727b85c84a81 Mon Sep 17 00:00:00 2001 From: yi-ge Date: Wed, 13 May 2020 13:59:30 +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=20II?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 7 ++++- .../binary-tree-level-order-traversal-ii.js | 28 +++++++++++++++++++ ...nary-tree-level-order-traversal-ii.test.js | 14 ++++++++++ 3 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 src/tree/binary-tree-level-order-traversal-ii.js create mode 100644 test/tree/binary-tree-level-order-traversal-ii.test.js diff --git a/README.md b/README.md index bdd8f80..1f8c7e5 100644 --- a/README.md +++ b/README.md @@ -359,11 +359,16 @@ LeetCode 与 LintCode 解题记录。此为个人练习仓库,代码中对重 - LeetCode 572. 另一个树的子树 - LintCode 1165. 另一个树的子树 -- [二叉树的层序遍历](src/tree/binary-tree-right-side-view.js) +- [二叉树的层序遍历](src/tree/binary-tree-level-order-traversal.js) - LeetCode 102. 二叉树的层序遍历 - LintCode 69. 二叉树的层次遍历 +- [二叉树的层次遍历 II](src/tree/binary-tree-level-order-traversal-ii.js) + + - LeetCode 107. 二叉树的层次遍历 II + - LintCode 70. 二叉树的层次遍历 II + ## 链表 - [合并K个排序链表](src/list/merge-k-sorted-lists.js) diff --git a/src/tree/binary-tree-level-order-traversal-ii.js b/src/tree/binary-tree-level-order-traversal-ii.js new file mode 100644 index 0000000..3393ae6 --- /dev/null +++ b/src/tree/binary-tree-level-order-traversal-ii.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 && node.left) queue.push(node.left) + if (node && node.right) queue.push(node.right) + if (node) tmp.push(node.val) + } + if (tmp.length) res.unshift(tmp) + } + + return res +} diff --git a/test/tree/binary-tree-level-order-traversal-ii.test.js b/test/tree/binary-tree-level-order-traversal-ii.test.js new file mode 100644 index 0000000..de225d4 --- /dev/null +++ b/test/tree/binary-tree-level-order-traversal-ii.test.js @@ -0,0 +1,14 @@ +import { levelOrder } from '../../src/tree/binary-tree-level-order-traversal-ii' +import Tree from './Tree.js' + +test('二叉树的层序遍历 II', () => { + const source = [3, 9, 20, null, null, 15, 7] + expect(levelOrder(Tree.arrToTree(source))).toEqual([ + [15, 7], + [9, 20], + [3] + ]) + + const source1 = [] + expect(levelOrder(Tree.arrToTree(source1))).toEqual([]) +})