From ac755523df92a3d2a702175dc2d9f5303cec35c2 Mon Sep 17 00:00:00 2001 From: Kohei Asai Date: Wed, 25 Sep 2019 18:34:27 -0700 Subject: [PATCH] 102. Binary Tree Level Order Traversal --- .../binaryTreeLevelOrderTraversal.test.ts | 23 ++++++++++++++++++ solutions/binaryTreeLevelOrderTraversal.ts | 24 +++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 solutions/binaryTreeLevelOrderTraversal.test.ts create mode 100644 solutions/binaryTreeLevelOrderTraversal.ts diff --git a/solutions/binaryTreeLevelOrderTraversal.test.ts b/solutions/binaryTreeLevelOrderTraversal.test.ts new file mode 100644 index 0000000..9065734 --- /dev/null +++ b/solutions/binaryTreeLevelOrderTraversal.test.ts @@ -0,0 +1,23 @@ +import { createBinaryTreeNode } from "../utilities/TreeNode"; +import levelOrder from "./binaryTreeLevelOrderTraversal"; + +describe("102. Binary Tree Level Order Traversal", () => { + const TEST_CASES = new Map([ + [[1, null, 2, 3], [[1], [2], [3]]], + [[4, 4, 5, 1, 2], [[4], [4, 5], [1, 2]]], + [ + [1, null, 1, null, 1, null, 1, null, 1, null, 1, 2], + [[1], [1], [1], [1], [1], [1], [2]] + ], + [[1], [[1]]], + [[], []] + ]); + + for (const [tree, expected] of TEST_CASES) { + it(`returns [${expected.map( + level => `[${level}]` + )}] when called with [${tree}]`, () => { + expect(levelOrder(createBinaryTreeNode(tree))).toEqual(expected); + }); + } +}); diff --git a/solutions/binaryTreeLevelOrderTraversal.ts b/solutions/binaryTreeLevelOrderTraversal.ts new file mode 100644 index 0000000..cb91a6d --- /dev/null +++ b/solutions/binaryTreeLevelOrderTraversal.ts @@ -0,0 +1,24 @@ +import { TreeNode } from "../utilities/TreeNode"; + +// 102. Binary Tree Level Order Traversal +// https://leetcode.com/problems/binary-tree-level-order-traversal/ +export default function levelOrder(root: TreeNode | null): T[][] { + const valuesEachLevel: T[][] = []; + + function traverse(node: TreeNode | null, level: number) { + if (node === null) return; + + if (valuesEachLevel[level]) { + valuesEachLevel[level].push(node.val); + } else { + valuesEachLevel[level] = [node.val]; + } + + traverse(node.left, level + 1); + traverse(node.right, level + 1); + } + + traverse(root, 0); + + return valuesEachLevel; +}