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; +}