class Node {
constructor(value) {
this.value = value;
this.left = null;
this.right = null;
}
}
// Plain binary tree search (no order)
function searchPlainBT(root, target) {
if (!root) return false;
if (root.value === target) return true;
// search left subtree
if (searchPlainBT(root.left, target)) return true;
// search right subtree
return searchPlainBT(root.right, target);
}
// BST search (uses order)
function searchBST(root, target) {
if (!root) return false;
if (root.value === target) return true;
if (target < root.value) {
return searchBST(root.left, target); // go left if smaller
} else {
return searchBST(root.right, target); // go right if larger or equal
}
}
// Build plain binary tree
const rootPlain = new Node(7);
rootPlain.left = new Node(3);
rootPlain.right = new Node(9);
rootPlain.left.left = new Node(1);
rootPlain.right.left = new Node(8);
rootPlain.right.right = new Node(10);
// Build BST with same values
const rootBST = new Node(7);
rootBST.left = new Node(3);
rootBST.right = new Node(9);
rootBST.left.left = new Node(1);
rootBST.right.left = new Node(8);
rootBST.right.right = new Node(10);
console.log("Search 8 in plain binary tree:", searchPlainBT(rootPlain, 8));
console.log("Search 8 in BST:", searchBST(rootBST, 8));if (root.value === target) return true;
check if current node is target
if (searchPlainBT(root.left, target)) return true;
search left subtree in plain binary tree
return searchPlainBT(root.right, target);
search right subtree if not found left
if (target < root.value) { return searchBST(root.left, target); } else { return searchBST(root.right, target); }
use BST order to decide direction
Search 8 in plain binary tree: true
Search 8 in BST: true