Skip to content

Commit

Permalink
problem: new problem solution - 226 . Invert Binary Tree
Browse files Browse the repository at this point in the history
  • Loading branch information
squxq committed Nov 22, 2023
1 parent edfc504 commit 05872db
Show file tree
Hide file tree
Showing 3 changed files with 134 additions and 0 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
55 changes: 55 additions & 0 deletions problems/algorithms/invertBinaryTree/InvertBinaryTree.test.ts
Original file line number Diff line number Diff line change
@@ -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),
),
),
);
});
});
78 changes: 78 additions & 0 deletions problems/algorithms/invertBinaryTree/InvertBinaryTree.ts
Original file line number Diff line number Diff line change
@@ -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),
);
}
}

0 comments on commit 05872db

Please sign in to comment.