From 05872db7adb977f76be861ae0b6bd8c08aa1d955 Mon Sep 17 00:00:00 2001 From: Francisco Tomas Date: Wed, 22 Nov 2023 19:58:43 +0000 Subject: [PATCH] problem: new problem solution - 226 . Invert Binary Tree --- README.md | 1 + .../invertBinaryTree/InvertBinaryTree.test.ts | 55 +++++++++++++ .../invertBinaryTree/InvertBinaryTree.ts | 78 +++++++++++++++++++ 3 files changed, 134 insertions(+) create mode 100644 problems/algorithms/invertBinaryTree/InvertBinaryTree.test.ts create mode 100644 problems/algorithms/invertBinaryTree/InvertBinaryTree.ts diff --git a/README.md b/README.md index b3b663e..c9fba62 100644 --- a/README.md +++ b/README.md @@ -107,6 +107,7 @@ My approach to solving LeetCode problems typically involves the following steps: | 144 | [Binary Tree Preorder Traversal](https://leetcode.com/problems/binary-tree-preorder-traversal/) | Algorithms | [TypeScript](./problems/algorithms/binaryTreePreorderTraversal/BinaryTreePreorderTraversal.ts) | Easy | | 145 | [Binary Tree Postorder Traversal](https://leetcode.com/problems/binary-tree-postorder-traversal/) | Algorithms | [TypeScript](./problems/algorithms/binaryTreePostorderTraversal/BinaryTreePostorderTraversal.ts) | Easy | | 222 | [Count Complete Tree Nodes](https://leetcode.com/problems/count-complete-tree-nodes/) | Algorithms | [TypeScript](./problems/algorithms/countCompleteTreeNodes/CountCompleteTreeNodes.ts) | Easy | +| 226 | [Invert Binary Tree](https://leetcode.com/problems/invert-binary-tree/) | Algorithms | [TypeScript](./problems/algorithms/invertBinaryTree/InvertBinaryTree.ts) | Easy | | ... | ... | ... | ... | ... | In this table: diff --git a/problems/algorithms/invertBinaryTree/InvertBinaryTree.test.ts b/problems/algorithms/invertBinaryTree/InvertBinaryTree.test.ts new file mode 100644 index 0000000..457685a --- /dev/null +++ b/problems/algorithms/invertBinaryTree/InvertBinaryTree.test.ts @@ -0,0 +1,55 @@ +// Source : https://leetcode.com/problems/invert-binary-tree/ +// Author : Francisco Tomas +// Date : 2023-11-22 + +import { invertTree, NodeTree } from "./InvertBinaryTree"; + +describe("invertTree", () => { + test("invert empty binary tree", () => { + const result = invertTree(null); + expect(result).toBe(null); + }); + + test("invert binary tree with few elements", () => { + const result = invertTree( + new NodeTree(2, new NodeTree(1, null, null), new NodeTree(3, null, null)), + ); + expect(result).toStrictEqual( + new NodeTree(2, new NodeTree(3, null, null), new NodeTree(1, null, null)), + ); + }); + + test("invert slighty bigger binary tree", () => { + const result = invertTree( + new NodeTree( + 4, + new NodeTree( + 2, + new NodeTree(1, null, null), + new NodeTree(3, null, null), + ), + new NodeTree( + 7, + new NodeTree(6, null, null), + new NodeTree(9, null, null), + ), + ), + ); + + expect(result).toStrictEqual( + new NodeTree( + 4, + new NodeTree( + 7, + new NodeTree(9, null, null), + new NodeTree(6, null, null), + ), + new NodeTree( + 2, + new NodeTree(3, null, null), + new NodeTree(1, null, null), + ), + ), + ); + }); +}); diff --git a/problems/algorithms/invertBinaryTree/InvertBinaryTree.ts b/problems/algorithms/invertBinaryTree/InvertBinaryTree.ts new file mode 100644 index 0000000..898d1cd --- /dev/null +++ b/problems/algorithms/invertBinaryTree/InvertBinaryTree.ts @@ -0,0 +1,78 @@ +// Source : https://leetcode.com/problems/invert-binary-tree/ +// Author : Francisco Tomas +// Date : 2023-11-22 + +/***************************************************************************************************** + * + * Given the root of a binary tree, invert the tree, and return its root. + * + * Example 1: + * + * Input: root = [4,2,7,1,3,6,9] + * Output: [4,7,2,9,6,3,1] + * + * Example 2: + * + * Input: root = [2,1,3] + * Output: [2,3,1] + * + * Example 3: + * + * Input: root = [] + * Output: [] + * + * Constraints: + * + * The number of nodes in the tree is in the range [0, 100]. + * -100 <= Node.val <= 100 + ******************************************************************************************************/ + +type BT = NodeTree | null; +export class NodeTree { + val: number; + left: BT; + right: BT; + constructor(val?: number, left?: BT, right?: BT) { + this.val = val ?? 0; + this.left = left === undefined ? null : left; + this.right = right === undefined ? null : right; + } +} + +/** + * BT -> BT + * given the root of a binary tree, invert the tree, and return its root + + * Stub: + function invertTree(root: BT): BT {return null} + + * Tests: + * I: root = [4,2,7,1,3,6,9] -> O: [4,7,2,9,6,3,1] + * I: root = [2,1,3] -> O: [2,3,1] + * I: root = [] -> O: [] + + * Template: + function invertTree(root: BT): BT { + if (root === null) {return null} + else { + return (... root.val + (invertTree(root.left)) + (invertTree(root.right))) + } + } + + * CONSTRAINTS: + * - The number of nodes in the tree is in the range [0, 100]. + * - -100 <= Node.val <= 100 + */ +export function invertTree(root: BT): BT { + if (root === null) { + return null; + } else { + return new NodeTree( + root.val, + invertTree(root.right), + invertTree(root.left), + ); + } +}