Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 3ab0f66

Browse files
Implemented invert binary tree (Bonus #9)
1 parent ef795eb commit 3ab0f66

File tree

4 files changed

+74
-14
lines changed

4 files changed

+74
-14
lines changed

‎Data-Structures/Sequential/Queue.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Node from '../Linked-Lists/NodeLL.ts';
1+
import Node from '../Linked-Lists/SinglyNode.ts';
22

33

44
export default class Queue<T> {

‎Data-Structures/Sequential/StackLL.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Node from '../Linked-Lists/NodeLL.ts';
1+
import Node from '../Linked-Lists/SinglyNode.ts';
22

33

44
export default class StackLL<T> {

‎Data-Structures/Trees/BinarySearchTree.ts

Lines changed: 47 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,19 @@ import BNode from './BinaryTreeNode.ts';
22

33

44
export default class BinarySearchTree {
5+
6+
public static traverse(node: BNode | null) {
7+
if(node === null) return;
8+
9+
const tree = Object.create({});
10+
tree.value = node.getValue();
11+
tree.left = node.getLeft() === null ? null : this.traverse(node.getLeft());
12+
tree.right = node.getRight() === null ? null : this.traverse(node.getRight());
13+
return tree;
14+
}
15+
16+
// ------------------- Instance Code Starts Here -------------------
17+
518
private root: BNode | null;
619

720
constructor() {
@@ -172,6 +185,26 @@ export default class BinarySearchTree {
172185
}
173186
}
174187

188+
public invertTree(): boolean {
189+
if (!this.root) false;
190+
this._invertNode(this.root);
191+
return true;
192+
}
193+
194+
private _invertNode(current: BNode | null) {
195+
if (current === null) return;
196+
197+
this._swapChildren(current);
198+
this._invertNode(current.getLeft());
199+
this._invertNode(current.getRight());
200+
}
201+
202+
private _swapChildren(node: BNode) {
203+
const left = node.getLeft();
204+
node.setLeft(node.getRight());
205+
node.setRight(left);
206+
}
207+
175208
public equalsQuantum(tree: BinarySearchTree): boolean {
176209
return JSON.stringify(this) === JSON.stringify(tree);
177210
}
@@ -182,16 +215,6 @@ function printNode(tree: BinarySearchTree, value: number): void {
182215
console.log('Find', value + ':', !!requestedNode ? JSON.stringify(requestedNode) : 'Node not found.');
183216
}
184217

185-
function traverseFrom(node: BNode | null) {
186-
if(node === null) return;
187-
188-
const tree = Object.create({});
189-
tree.value = node.getValue();
190-
tree.left = node.getLeft() === null ? null : traverseFrom(node.getLeft());
191-
tree.right = node.getRight() === null ? null : traverseFrom(node.getRight());
192-
return tree;
193-
}
194-
195218
//---------------------------------------------------------------------
196219
// ---------- MAIN PROGRAM ----------
197220
//---------------------------------------------------------------------
@@ -210,12 +233,24 @@ if (import.meta.main) {
210233
tree.insert(170);
211234
tree.insert(15);
212235
tree.insert(1);
213-
console.log('Tree: ', JSON.stringify(traverseFrom(tree.getRoot())));
236+
console.log('Tree: ', JSON.stringify(BinarySearchTree.traverse(tree.getRoot())));
214237
tree.remove(20);
215238
printNode(tree, 4);
216239
printNode(tree, 17);
217240
printNode(tree, 40);
218241
printNode(tree, 170);
242+
console.log('Original Tree: ', JSON.stringify(BinarySearchTree.traverse(tree.getRoot())));
243+
tree.invertTree();
244+
console.log('Inverse Tree: ', JSON.stringify(BinarySearchTree.traverse(tree.getRoot())));
219245

220246
// RUN: deno run Data-Structures/Trees/BinarySearchTree.ts
221-
}
247+
}
248+
249+
// --------------------------- Terminal Output: ---------------------------
250+
// Tree: {"value":9,"left":{"value":4,"left":{"value":1,"left":null,"right":null},"right":{"value":6,"left":null,"right":null}},"right":{"value":20,"left":{"value":15,"left":null,"right":null},"right":{"value":170,"left":null,"right":null}}}
251+
// Find 4: {"value":4,"left":{"value":1,"left":null,"right":null},"right":{"value":6,"left":null,"right":null}}
252+
// Find 17: Node not found.
253+
// Find 40: Node not found.
254+
// Find 170: {"value":170,"left":{"value":15,"left":null,"right":null},"right":null}
255+
// Original Tree: {"value":9,"left":{"value":4,"left":{"value":1,"left":null,"right":null},"right":{"value":6,"left":null,"right":null}},"right":{"value":170,"left":{"value":15,"left":null,"right":null},"right":null}}
256+
// Inverse Tree: {"value":9,"left":{"value":170,"left":null,"right":{"value":15,"left":null,"right":null}},"right":{"value":4,"left":{"value":6,"left":null,"right":null},"right":{"value":1,"left":null,"right":null}}}

‎Playground/Interviews/HealthcareHM.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
function findNumOccurrences(color: string, colorsArr: string[]): number {
2+
let occurrences = 0;
3+
4+
for (let c of colorsArr) {
5+
if (color === c) ++occurrences;
6+
}
7+
8+
return occurrences;
9+
}
10+
11+
console.log(findNumOccurrences("black", ["white", "red", "black", "green", "black", "red"]));
12+
13+
function unique(array: Array<number> | Array<string>): boolean {
14+
const found = new Set();
15+
for (let element of array) {
16+
if (found.has(element)) return false;
17+
else found.add(element);
18+
}
19+
return true;
20+
}
21+
22+
console.log(unique([1,4,6,8,2]));
23+
console.log(unique([1,4,6,8,4,2]));
24+
25+
// RUN: deno run Playground/Interviews/HealthcareHM.ts

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /