class TreeNode {
val: number;
left: TreeNode | null;
right: TreeNode | null;
constructor(val: number) {
this.val = val;
this.left = null;
this.right = null;
}
}
// Plain binary tree search (no order)
function searchPlain(root: TreeNode | null, target: number): boolean {
if (!root) return false;
if (root.val === target) return true;
// search left subtree
if (searchPlain(root.left, target)) return true;
// search right subtree
return searchPlain(root.right, target);
}
// BST search (uses order to skip branches)
function searchBST(root: TreeNode | null, target: number): boolean {
if (!root) return false;
if (root.val === target) return true;
if (target < root.val) return searchBST(root.left, target); // go left
else return searchBST(root.right, target); // go right
}
// Build example trees
// Plain binary tree
const rootPlain = new TreeNode(5);
rootPlain.left = new TreeNode(3);
rootPlain.right = new TreeNode(8);
rootPlain.left.left = new TreeNode(1);
rootPlain.right.left = new TreeNode(6);
rootPlain.right.right = new TreeNode(9);
// BST (same structure but obeys BST property)
const rootBST = new TreeNode(5);
rootBST.left = new TreeNode(3);
rootBST.right = new TreeNode(8);
rootBST.left.left = new TreeNode(1);
rootBST.right.left = new TreeNode(6);
rootBST.right.right = new TreeNode(9);
console.log("Plain Binary Tree search for 6:", searchPlain(rootPlain, 6));
console.log("BST search for 6:", searchBST(rootBST, 6));stop search if node is null
if (root.val === target) return true;
found target node
if (searchPlain(root.left, target)) return true;
search left subtree in plain tree
return searchPlain(root.right, target);
search right subtree if not found left
if (target < root.val) return searchBST(root.left, target);
go left if target less than current node in BST
else return searchBST(root.right, target);
go right if target greater than current node in BST
Plain Binary Tree search for 6: true
BST search for 6: true