1class BSTNode {
2 constructor(value) {
3 this.value = value;
4 this.left = this.right = null;
5 }
6}
7
8function search(node, target) {
9 if (!node) return null;
10 if (target === node.value) return node;
11 if (target < node.value) return search(node.left, target);
12 return search(node.right, target);
13}
14
15function insert(node, value) {
16 if (!node) return new BSTNode(value);
17 if (value < node.value) node.left = insert(node.left, value);
18 else if (value > node.value) node.right = insert(node.right, value);
19 return node;
20}
21
22function deleteNode(node, target) {
23 if (!node) return null;
24 if (target < node.value) node.left = deleteNode(node.left, target);
25 else if (target > node.value) node.right = deleteNode(node.right, target);
26 else {
27 if (!node.left) return node.right;
28 if (!node.right) return node.left;
29 const succ = minNode(node.right);
30 node.value = succ.value;
31 node.right = deleteNode(node.right, succ.value);
32 }
33 return node;
34}
35
36function inorder(node) {
37 if (!node) return;
38 inorder(node.left); visit(node); inorder(node.right);
39}