На самом деле это ошибка, которую все делают в интервью.
С левой стороны нужно проверить (minLimitof node, node.value)
Rightchild должен быть проверен по (node.value, MaxLimit узла)
IsValidBST(root,-infinity,infinity);
bool IsValidBST(BinaryNode node, int MIN, int MAX)
{
if(node == null)
return true;
if(node.element > MIN
&& node.element < MAX
&& IsValidBST(node.left,MIN,node.element)
&& IsValidBST(node.right,node.element,MAX))
return true;
else
return false;
}
Другое решение (если пространство не является ограничением):
Выполните обход дерева по порядку и сохраните значения узлов в массиве. Если массив находится в отсортированном порядке, в противном случае он является действительным BST, иначе - нет.