Skip to content

Commit 69d0aee

Browse files
Create BinarySearchTree.js
1 parent 46362e3 commit 69d0aee

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed

Trees/BinarySearchTree.js

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
class Node {
2+
constructor(value) {
3+
this.value = value;
4+
this.left = null;
5+
this.right = null;
6+
}
7+
}
8+
9+
class BinarySearchTree {
10+
constructor() {
11+
this.root = null;
12+
}
13+
14+
insert(value) {
15+
const newNode = new Node(value);
16+
17+
if (!this.root) {
18+
this.root = newNode;
19+
} else {
20+
this.insertNode(this.root, newNode);
21+
}
22+
}
23+
24+
insertNode(node, newNode) {
25+
if (newNode.value < node.value) {
26+
if (node.left === null) {
27+
node.left = newNode;
28+
} else {
29+
this.insertNode(node.left, newNode);
30+
}
31+
} else {
32+
if (node.right === null) {
33+
node.right = newNode;
34+
} else {
35+
this.insertNode(node.right, newNode);
36+
}
37+
}
38+
}
39+
40+
search(value) {
41+
return this.searchNode(this.root, value);
42+
}
43+
44+
searchNode(node, value) {
45+
if (node === null) {
46+
return false;
47+
}
48+
49+
if (value < node.value) {
50+
return this.searchNode(node.left, value);
51+
} else if (value > node.value) {
52+
return this.searchNode(node.right, value);
53+
} else {
54+
return true;
55+
}
56+
}
57+
58+
inOrderTraversal(callback) {
59+
this.inOrderTraversalNode(this.root, callback);
60+
}
61+
62+
inOrderTraversalNode(node, callback) {
63+
if (node !== null) {
64+
this.inOrderTraversalNode(node.left, callback);
65+
callback(node.value);
66+
this.inOrderTraversalNode(node.right, callback);
67+
}
68+
}
69+
}
70+
71+
// Example usage:
72+
const bst = new BinarySearchTree();
73+
bst.insert(10);
74+
bst.insert(5);
75+
bst.insert(15);
76+
bst.insert(3);
77+
bst.insert(7);
78+
bst.insert(12);
79+
bst.insert(18);
80+
81+
console.log("In-order traversal:");
82+
bst.inOrderTraversal(value => console.log(value));
83+
84+
console.log("Search for 7:", bst.search(7)); // Should return true
85+
console.log("Search for 9:", bst.search(9)); // Should return false

0 commit comments

Comments
 (0)