Вы должны вызвать функцию, как показано ниже.В которой INT_MIN и INT_MAX являются постоянными.
IsValidBST (root, INT_MIN, INT_MAX)
Но этот подход не будет работать для всех данных.Означает, что данные, для которых мы не знаем значений MIN и MAX, такие как строки или любые произвольные определяемые пользователем типы.
Чтобы выяснить, является ли данный BT BST для какого-либо типа данных, вам нужно пойти по следующему подходу.1. вызовите рекурсивную функцию до конца конечного узла, используя обход inorder. 2. Создайте свои минимальные и максимальные значения самостоятельно.
При условии, что элемент дерева должен иметь значение меньше или больше, чем определено оператором.
#define MIN (FirstVal, SecondVal) ((FirstVal) < (SecondVal)) ? (FirstVal):(SecondVal)
#define MAX (FirstVal, SecondVal) ((FirstVal) > (SecondVal)) ? (FirstVal):(SecondVal)
template <class T>
bool IsValidBST (treeNode &root)
{
T min, max;
return IsValidBST (root, &min, &max);
}
template <class T>
bool IsValidBST (treeNode *root, T *MIN , T *MAX)
{
T leftMin, leftMax, rightMin, rightMax;
bool isValidBST;
if (root->leftNode == NULL && root->rightNode == NULL)
{
*MIN = root->element;
*MAX = root->element;
return true;
}
isValidBST = IsValidBST (root->leftNode, &leftMin, &leftMax);
if (isValidBST)
isValidBST = IsValidBST (root->rightNode, &rightMin, &rightMax);
if (isValidBST)
{
*MIN = MIN (leftMIN, rightMIN);
*Max = MAX (rightMax, leftMax);
}
return isValidBST;
}