Оба должны быть примерно одинаковыми с точки зрения скорости. Оба являются O (log n). Бинарный поиск обращается к ячейке памяти и производит сравнение на каждой итерации. BST следует за указателем (который также является доступом к памяти) и производит сравнение. Разница в константах в их сложности Big-O должна быть незначительной.
Одной из возможных причин может быть тот факт, что вам нужно выполнять дополнительные вычисления во время каждой итерации двоичного поиска. Большинство реализаций имеют следующую строку:
mid=(high+low)/2;
Операция деления может быть дорогостоящей по сравнению с целочисленными операциями сложения и сравнения. Это может способствовать увеличению производительности. Одним из способов уменьшения воздействия будет использование:
mid=(high+low)>>1;
Но я думаю, что большинство компиляторов все равно оптимизируют это для вас.
Вариант BST не должен ничего вычислять, он просто сравнивает и следует за соответствующим указателем.
Также может случиться, что вы выполняете бинарный поиск рекурсивно, а ваш запрос BST нерекурсивно делает BST быстрее. Но действительно сложно придумать какие-либо конкретные причины, не глядя на ваш код.