Assume there is an implementation of binary tree ADI such th
Solution
bool isSubTreeLessThan(BinaryTree *p, int val) {
if (!p) return true;
return (p->data < val &&
isSubTreeLessThan(p->left, val) &&
isSubTreeLessThan(p->right, val));
}
bool isSubTreeGreaterThan(BinaryTree *p, int val) {
if (!p) return true;
return (p->data > val &&
isSubTreeGreaterThan(p->left, val) &&
isSubTreeGreaterThan(p->right, val));
}
bool isBSTBruteForce(BinaryTree *p) {
if (!p) return true;
return isSubTreeLessThan(p->left, p->data) &&
isSubTreeGreaterThan(p->right, p->data) &&
isBSTBruteForce(p->left) &&
isBSTBruteForce(p->right);
}
bool isBSTHelper(BinaryTree *p, int low, int high) {
if (!p) return true;
if (low < p->data && p->data < high)
return isBSTHelper(p->left, low, p->data) &&
isBSTHelper(p->right, p->data, high);
else
return false;
}
bool isBST(BinaryTree *root) {
// INT_MIN and INT_MAX are defined in C++\'s <climits> library
return isBSTHelper(root, INT_MIN, INT_MAX);
}
Alternat Solution :
bool isBSTInOrderHelper(BinaryTree *p, int& prev) {
if (!p) return true;
return (isBSTInOrderHelper(p->left, prev) &&
(p->data > prev) && (prev = p->data) &&
isBSTInOrderHelper(p->right, prev));
}
bool isBSTInOrder(BinaryTree *root) {
int prev = INT_MIN;
return isBSTInOrderHelper(root, prev);
}

