#include <iostream>
using namespace std;
struct Node
{
int data;
struct Node *left;
struct Node *right;
};
struct Node * newNode(int data)
{
// Allocate memory for new node
struct Node * node = (struct Node*)malloc(sizeof(struct Node));
// Assign data to this node
node->data = data;
// Initialize left and right children as NULL
node->left = NULL;
node->right = NULL;
return(node);
}
int isLeftSubtreeLesser(Node * root, int data) {
if (root->data > data) {
return 0;
}
if (isLeftSubtreeLesser(root->left, data) && isLeftSubtreeLesser(root->right, data))
return 1;
return 0;
}
int isRightSubtreeGreater(Node * root, int data) {
if (root->data <= data) {
return 0;
}
if (isRightSubtreeGreater(root->left, data) && isRightSubtreeGreater(root->right, data))
return 1;
return 0;
}
int isBinarySearchTree (Node * root) {
if (root == NULL) {
return 1;
}
if (isLeftSubtreeLesser(root->left, root->data) && isRightSubtreeGreater(root->right, root->data)
&& isBinarySearchTree(root->left) && isBinarySearchTree(root->right)){
return 1;
} else {
return 0;
}
}
int main() {
struct Node *root = newNode(1);
root->left = newNode(2);
root->right = newNode(3);
root->left->left = newNode(4);
isBinarySearchTree(root);
return 0;
}
using namespace std;
struct Node
{
int data;
struct Node *left;
struct Node *right;
};
struct Node * newNode(int data)
{
// Allocate memory for new node
struct Node * node = (struct Node*)malloc(sizeof(struct Node));
// Assign data to this node
node->data = data;
// Initialize left and right children as NULL
node->left = NULL;
node->right = NULL;
return(node);
}
int isLeftSubtreeLesser(Node * root, int data) {
if (root->data > data) {
return 0;
}
if (isLeftSubtreeLesser(root->left, data) && isLeftSubtreeLesser(root->right, data))
return 1;
return 0;
}
int isRightSubtreeGreater(Node * root, int data) {
if (root->data <= data) {
return 0;
}
if (isRightSubtreeGreater(root->left, data) && isRightSubtreeGreater(root->right, data))
return 1;
return 0;
}
int isBinarySearchTree (Node * root) {
if (root == NULL) {
return 1;
}
if (isLeftSubtreeLesser(root->left, root->data) && isRightSubtreeGreater(root->right, root->data)
&& isBinarySearchTree(root->left) && isBinarySearchTree(root->right)){
return 1;
} else {
return 0;
}
}
int main() {
struct Node *root = newNode(1);
root->left = newNode(2);
root->right = newNode(3);
root->left->left = newNode(4);
isBinarySearchTree(root);
return 0;
}