Ваша проблема здесь:
if(val.CompareTo(lower) <= 0)
return false; // you are always hitting this line
if(val.CompareTo(upper) >= 0)
return false;
Поскольку ваш T val = node.data;
, а ваш нижний и даже верхний - node.data
с вашего первого звонка.
Так что, скорее всего, линия к исправить это
return _HelperForIsValidBinarySearchTreeRecursive(root, root.data, root.data);
, так как я предполагаю, что ваше первоначальное намерение состояло в том, чтобы сравнить левое и правое с root?
Исходя из этого: https://www.geeksforgeeks.org/a-program-to-check-if-a-binary-tree-is-bst-or-not/
для вашего подхода к нумерации c ваше решение должно быть таким:
/* false if this node violates the min/max constraints */
if (node.data < min || node.data > max)
{
return false;
}
Таким образом, ваш код становится:
if(val.CompareTo(lower) < 0)
return false; // you are always hitting this line
if(val.CompareTo(upper) > 0)
return false;
Затем вы столкнетесь с следующим препятствием вниз по линия. Мое предложение для решения было бы изменить это:
private bool _HelperForIsValidBinarySearchTreeRecursive(Node<T> node, T lower, T upper)
На
private bool _HelperForIsValidBinarySearchTreeRecursive(Node<T> node, Node<T> leftNode<T> right)
и позвонить так:
_HelperForIsValidBinarySearchTreeRecursive(root, root.Left, root.Right)