Skip to content

Commit 5ef2fe9

Browse files
committed
worked on remove, added parent value to BST
1 parent 2d526ed commit 5ef2fe9

File tree

1 file changed

+45
-32
lines changed

1 file changed

+45
-32
lines changed

src/typescript/BST.ts

Lines changed: 45 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,12 @@ const canvas = document.getElementById("main-canvas") as HTMLCanvasElement;
1313
private root: number;
1414
private left: any;
1515
private right: any;
16+
private parent: any;
1617
constructor (root: number) {
1718
this.root = root;
1819
this.left = null;
1920
this.right = null;
21+
this.parent = null;
2022
}
2123

2224
getLeft() {
@@ -28,33 +30,45 @@ const canvas = document.getElementById("main-canvas") as HTMLCanvasElement;
2830
getRoot() {
2931
return this.root;
3032
}
33+
getParent() {
34+
return this.parent;
35+
}
3136

3237
setLeft(node: BinaryTree) {
3338
this.left = node;
39+
this.left.setParent(this);
3440
}
3541
setRight(node: BinaryTree) {
3642
this.right = node;
43+
this.right.setParent(this);
3744
}
3845
setRoot(num: number) {
3946
this.root = num;
4047
}
48+
setParent(node: BinaryTree) {
49+
this.parent = node;
50+
}
51+
52+
removeChild(node: BinaryTree) {
53+
if (this.left && node.getRoot() === this.left.getRoot()) {
54+
this.left = null;
55+
} else if (this.right && node.getRoot() === this.right.getRoot()) {
56+
this.right = null;
57+
}
58+
}
4159

4260
insertLeft(num: number) {
4361
if (this.left === null) {
4462
this.left = new BinaryTree(num);
45-
} else {
46-
const tree = new BinaryTree(num);
47-
tree.left = this.left;
48-
this.left = tree;
63+
64+
this.left.setParent(this);
4965
}
5066
}
5167
insertRight(num: number) {
5268
if (this.right === null) {
5369
this.right = new BinaryTree(num);
54-
} else {
55-
const tree = new BinaryTree(num);
56-
tree.right = this.right;
57-
this.right = tree;
70+
71+
this.right.setParent(this);
5872
}
5973
}
6074
}
@@ -147,35 +161,40 @@ const canvas = document.getElementById("main-canvas") as HTMLCanvasElement;
147161
}
148162
function insert(tree: BinaryTree, value: number) {
149163
if (value > tree.getRoot()) {
150-
if (tree.getLeft() === null && tree.getRight() === null) {
164+
if ((tree.getLeft() === null && tree.getRight() === null) || tree.getRight() === null) {
151165
tree.insertRight(value);
152-
} else {
153-
insert(tree.getRight(), value)
166+
} else if (tree.getRight()) {
167+
insert(tree.getRight(), value);
154168
}
155169
} else {
156170
if (tree.getLeft() === null) {
157171
tree.insertLeft(value);
158172
} else {
159-
insert(tree.getLeft(), value)
173+
insert(tree.getLeft(), value);
160174
}
161175
}
162176
}
163-
function deepRight(tree: BinaryTree) {
164-
if (tree.getRight()) {
165-
return deepRight(tree.getRight())
166-
} else {
167-
return tree.getRoot()
168-
}
169-
}
170177
function remove(tree: BinaryTree, value: number) {
171178
if (tree.getRoot() === value) {
172-
tree.setRoot(deepRight(tree));
173-
} else {
174-
if (tree.getLeft()) {
175-
remove(tree.getLeft(), value)
179+
if (tree.getLeft() === null && tree.getRight() === null) {
180+
tree.getParent().removeChild(tree);
181+
} else if (tree.getLeft() === null && tree.getRight()) {
182+
tree.setRoot(tree.getRight().getRoot());
183+
tree.removeChild(tree.getRight());
184+
} else if (tree.getRight() == null && tree.getLeft()) {
185+
tree.setRoot(tree.getLeft().getRoot());
186+
tree.removeChild(tree.getLeft());
187+
} else {
188+
let minimum = minRoot(tree.getRight())
189+
remove(tree, minimum);
190+
tree.setRoot(minimum);
176191
}
192+
} else {
177193
if (tree.getRight()) {
178-
remove(tree.getRight(), value)
194+
remove(tree.getRight(), value);
195+
}
196+
if (tree.getLeft()) {
197+
remove(tree.getLeft(), value);
179198
}
180199
}
181200
}
@@ -247,9 +266,6 @@ const canvas = document.getElementById("main-canvas") as HTMLCanvasElement;
247266

248267
updateTraversals(tree);
249268

250-
console.log("MIN", minRoot(tree));
251-
console.log("MAX", maxRoot(tree));
252-
253269
drawTree(ctx, tree, canvas.width, scale);
254270

255271
var insertNumber = document.getElementById('insert-form-input') as HTMLInputElement;
@@ -258,18 +274,15 @@ const canvas = document.getElementById("main-canvas") as HTMLCanvasElement;
258274
var removeNumber = document.getElementById('remove-form-input') as HTMLInputElement;
259275
var removeNumberForm = document.getElementById('remove-form') as HTMLElement;
260276

261-
// if (numberForm.addEventListener){
262-
263-
// }
264277
insertNumberForm.addEventListener("submit", function (){
265-
console.log(insertNumber.value);
278+
ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
266279
insert(tree, parseInt(insertNumber.value))
267280
drawTree(ctx, tree, canvas.width, scale);
268281
updateTraversals(tree);
269282
}, false);
270283

271284
removeNumberForm.addEventListener("submit", function (){
272-
console.log(removeNumber.value);
285+
ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
273286
remove(tree, parseInt(removeNumber.value))
274287
drawTree(ctx, tree, canvas.width, scale);
275288
updateTraversals(tree);

0 commit comments

Comments
 (0)