Я думаю, я вижу, где твое недоразумение;вы ожидаете, что isBinary
будет обновлено, только если CheckIfTreeIsBinaryPrivate
вернет значение.
Это не так, как работает - функция с возвращаемым типом, отличным от void
, всегда должна возвращать что-то .
Если функция явно ничего не возвращает - например,, достигнув конца функции - программа имеет неопределенное поведение.
Нет способа определить, возвратила ли функция что-либо или нет, и вы должны возвращать что-то на каждом пути через функцию.
Вы можете сделать это с одним большим выражением,
bool BinarySearchTree::isBST(nodePtr Ptr){
return Ptr == nullptr
|| ( (Ptr->left == nullptr || (Ptr->left->data < Ptr->data && isBST(Ptr->left)))
&& (Ptr->right == nullptr || (Ptr->right->data > Ptr->data && isBST(Ptr->right))));
}
или по частям:
bool BinarySearchTree::isBST(nodePtr Ptr){
// An empty tree is a BST.
if (Ptr == nullptr)
return true;
// If the left subtree is not a BST, neither is the entire tree.
else if (Ptr->left != nullptr && (Ptr->left->data > Ptr->data || !isBST(Ptr->left)))
return false;
// If the right subtree is not a BST, neither is the entire tree.
else if (Ptr->right != nullptr && (Ptr->right->data < Ptr->data || !isBST(Ptr->right)))
return false;
// All tests passed.
else
return true;
}