From c230f110f71b326b6c358e386fea87206c6e6642 Mon Sep 17 00:00:00 2001 From: Kohei Asai Date: Wed, 25 Sep 2019 18:32:53 -0700 Subject: [PATCH] 145. Binary Tree Postorder Traversal --- .../binaryTreePostorderTraversal.test.ts | 21 +++++++++++++++++++ solutions/binaryTreePostorderTraversal.ts | 20 ++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 solutions/binaryTreePostorderTraversal.test.ts create mode 100644 solutions/binaryTreePostorderTraversal.ts diff --git a/solutions/binaryTreePostorderTraversal.test.ts b/solutions/binaryTreePostorderTraversal.test.ts new file mode 100644 index 0000000..f84e0e0 --- /dev/null +++ b/solutions/binaryTreePostorderTraversal.test.ts @@ -0,0 +1,21 @@ +import { createBinaryTreeNode } from "../utilities/TreeNode"; +import postorderTraversal from "./binaryTreePostorderTraversal"; + +describe("145. Binary Tree Postorder Traversal", () => { + const TEST_CASES = new Map([ + [[1, null, 2, 3], [3, 2, 1]], + [[4, 4, 5, 1, 2], [1, 2, 4, 5, 4]], + [ + [1, null, 1, null, 1, null, 1, null, 1, null, 1, 2], + [2, 1, 1, 1, 1, 1, 1] + ], + [[1], [1]], + [[], []] + ]); + + for (const [tree, expected] of TEST_CASES) { + it(`returns [${expected}] when called with [${tree}]`, () => { + expect(postorderTraversal(createBinaryTreeNode(tree))).toEqual(expected); + }); + } +}); diff --git a/solutions/binaryTreePostorderTraversal.ts b/solutions/binaryTreePostorderTraversal.ts new file mode 100644 index 0000000..4c63563 --- /dev/null +++ b/solutions/binaryTreePostorderTraversal.ts @@ -0,0 +1,20 @@ +import { TreeNode } from "../utilities/TreeNode"; + +// 145. Binary Tree Postorder Traversal +// https://leetcode.com/problems/binary-tree-postorder-traversal/ +export default function postorderTraversal(root: TreeNode | null): T[] { + const history: T[] = []; + + function traverse(node: TreeNode | null): void { + if (node === null) return; + + traverse(node.left); + traverse(node.right); + + history.push(node.val); + } + + traverse(root); + + return history; +}