4.5 Implement a function to check if a binary tree is a binary search tree.
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
Solution #1: In-Order Traversal
bool isValidBST(TreeNode *node, int &lastVal) {
if (node == NULL) {
return true;
}
if (isValidBST(node->left, lastVal) == false) {
return false;
}
if (lastVal >= node->val) {
return false;
}
lastVal = node->val;
if (isValidBST(node->right, lastVal) == false) {
return false;
}
return true;
}
bool isValidBST(TreeNode *root) {
int lastVal = INT_MIN;
return isValidBST(root, lastVal);
}
Solution #2: The Min / Max Solution
bool isValidBST(TreeNode *node, int min, int max) {
if (node == NULL) {
return true;
}
if (node->val >= max || node->val <= min) {
return false;
}
if (!isValidBST(node->left, min, node->val)) {
return false;
}
if (!isValidBST(node->right, node->val, max)) {
return false;
}
return true;
}
bool isValidBST(TreeNode *root) {
return isValidBST(root, INT_MIN, INT_MAX);
}