Trees
BST Search
Search a binary search tree for one present and one absent value.
Algorithm
Basic Implementation
basic.dart
class Node {
Node(this.value, [this.left, this.right]);
final int value;
Node? left;
Node? right;
}
String render(Node? node) {
if (node == null) return "_";
if (node.left == null && node.right == null) return node.value.toString();
return "${node.value}(${render(node.left)},${render(node.right)})";
}
Node sampleTree() => Node(4, Node(2, Node(1), Node(3)), Node(6, Node(5), Node(7)));
String listString(List<int> values) => "[${values.join(", ")}]";
bool search(Node? root, int target) { var node = root; while (node != null) { if (target == node.value) return true; node = target < node.value ? node.left : node.right; } return false; }
void main() { final root = sampleTree(); print(search(root, 5) ? '5 found' : '5 not found'); print(search(root, 8) ? '8 found' : '8 not found'); }
Complexity
- Time: O(h) per search
- Space: O(1) iterative
Implementation notes
- Render tree structure explicitly instead of printing node objects.
- The replay highlights the node, traversal state, queue, path, or search cursor that changes at each step.
search path
A comparison chooses one subtree at each step, so whole branches are skipped.