Skip to content

Commit 7f4bb0b

Browse files
committed
Binary Search Tree optimizations
1 parent 4aafce1 commit 7f4bb0b

File tree

2 files changed

+61
-0
lines changed

2 files changed

+61
-0
lines changed

JavaScript/6-bst-opt.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
'use strict';
2+
3+
// Binary Search Tree
4+
5+
const tree = (data = null, left = null, right = null) => [data, left, right];
6+
tree.data = (node, data = node[0]) => (node[0] = data, data);
7+
tree.left = (node, data) => (data ? node[1] = tree(data) : node[1]);
8+
tree.right = (node, data) => (data ? node[2] = tree(data) : node[2]);
9+
10+
tree.insert = (node, data) => {
11+
const i = data < node[0] ? 1 : 2;
12+
if (node[i] === null) node[i] = tree(data);
13+
else tree.insert(node[i], data);
14+
};
15+
16+
tree.search = (node, data) => {
17+
const value = node[0];
18+
if (data === value) return node;
19+
const i = data < value ? 1 : 2;
20+
return tree.search(node[i], data);
21+
};
22+
23+
// Usage
24+
25+
const root = tree(5);
26+
tree.insert(root, 7);
27+
tree.insert(root, 9);
28+
tree.insert(root, 2);
29+
tree.insert(root, 3);
30+
tree.insert(root, 1);
31+
32+
const node = tree.search(root, 2);
33+
console.dir(node, { depth: 3 });

JavaScript/7-bst-over.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
'use strict';
2+
3+
// Binary Search Tree
4+
5+
const tree = (data = null, left = null, right = null) => [data, left, right];
6+
tree.data = (node, data = node[0]) => (node[0] = data, data);
7+
tree.left = (node, data) => (data ? node[1] = tree(data) : node[1]);
8+
tree.right = (node, data) => (data ? node[2] = tree(data) : node[2]);
9+
10+
tree.insert = (node, data, i = data < node[0] ? 1 : 2) => (
11+
node[i] === null ? node[i] = tree(data) : tree.insert(node[i], data)
12+
);
13+
14+
tree.search = (node, data, value = node[0]) => (
15+
data === value ? node : tree.search(node[data < value ? 1 : 2], data)
16+
);
17+
18+
// Usage
19+
20+
const root = tree(5);
21+
tree.insert(root, 7);
22+
tree.insert(root, 9);
23+
tree.insert(root, 2);
24+
tree.insert(root, 3);
25+
tree.insert(root, 1);
26+
27+
const node = tree.search(root, 2);
28+
console.dir(node, { depth: 3 });

0 commit comments

Comments
 (0)