Trees
BST Search
Search a binary search tree for one present and one absent value.
Algorithm
Basic Implementation
Basic.java
import java.util.*;
public class Basic {
static class Node {
int value;
Node left;
Node right;
Node(int value) { this.value = value; }
Node(int value, Node left, Node right) { this.value = value; this.left = left; this.right = right; }
}
static String render(Node node) {
if (node == null) return "_";
if (node.left == null && node.right == null) return Integer.toString(node.value);
return node.value + "(" + render(node.left) + "," + render(node.right) + ")";
}
static Node sampleTree() {
return new Node(4, new Node(2, new Node(1), new Node(3)), new Node(6, new Node(5), new Node(7)));
}
static boolean search(Node root, int target) { Node node = root; while (node != null) { if (target == node.value) return true; node = target < node.value ? node.left : node.right; } return false; }
public static void main(String[] args) { Node root = sampleTree(); System.out.println(search(root, 5) ? "5 found" : "5 not found"); System.out.println(search(root, 8) ? "8 found" : "8 not found"); }
}
Complexity
- Time: O(h) per search
- Space: O(1) iterative
Implementation notes
- Java represents the tree with
Nodeobjects containing primitiveint valueplusNode leftandNode rightreference fields. Missing children arenull. searchis iterative, not recursive: it copies the root reference into a localNode nodecursor and runswhile (node != null).- Each step compares the primitive
targetwithnode.value. Equality returnstrue; otherwisenode = target < node.value ? node.left : node.rightfollows the next child reference. Anullcursor exits the loop and returnsfalse. - The replay shows the found path for
5as4 -> right,6 -> left, then match at5; the missing search for8walks right from4,6, and7before reachingnull. The search allocates no new nodes, so GC relevance is limited to the prebuilt tree objects.
search path
A comparison chooses one subtree at each step, so whole branches are skipped.