#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
/* A binary tree node has data, pointer to left child
and a pointer to right child */
struct node
{
int data;
struct node* left;
struct node* right;
};
/* Helper function that allocates a new node with the
given data and NULL left and right pointers. */
struct node* newNode(int data)
{
struct node* node = (struct node*)
malloc(sizeof(struct node));
node->data = data;
node->left = NULL;
node->right = NULL;
return(node);
}
bool isBST(struct node* root)
{
static struct node *prev = NULL;
// traverse the tree in inorder fashion and keep track of prev node
if (!root)
return true;
if (!isBST(root->left))
return false;
// Allows only distinct valued nodes
if (prev != NULL && root->data <= prev->data)
return false;
prev = root;
return isBST(root->right);
}
/* Driver program to test above functions*/
int main()
{
struct node *root = newNode(100);
root->right = newNode(101);
root->left = newNode(4);
if(isBST(root))
printf("Is BST");
else
printf("Not a BST");
getchar();
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPGxpbWl0cy5oPgogCi8qIEEgYmluYXJ5IHRyZWUgbm9kZSBoYXMgZGF0YSwgcG9pbnRlciB0byBsZWZ0IGNoaWxkCiAgIGFuZCBhIHBvaW50ZXIgdG8gcmlnaHQgY2hpbGQgKi8Kc3RydWN0IG5vZGUKewogICAgaW50IGRhdGE7CiAgICBzdHJ1Y3Qgbm9kZSogbGVmdDsKICAgIHN0cnVjdCBub2RlKiByaWdodDsKfTsKIC8qIEhlbHBlciBmdW5jdGlvbiB0aGF0IGFsbG9jYXRlcyBhIG5ldyBub2RlIHdpdGggdGhlCiAgIGdpdmVuIGRhdGEgYW5kIE5VTEwgbGVmdCBhbmQgcmlnaHQgcG9pbnRlcnMuICovCnN0cnVjdCBub2RlKiBuZXdOb2RlKGludCBkYXRhKQp7CiAgc3RydWN0IG5vZGUqIG5vZGUgPSAoc3RydWN0IG5vZGUqKQogICAgICAgICAgICAgICAgICAgICAgIG1hbGxvYyhzaXplb2Yoc3RydWN0IG5vZGUpKTsKICBub2RlLT5kYXRhID0gZGF0YTsKICBub2RlLT5sZWZ0ID0gTlVMTDsKICBub2RlLT5yaWdodCA9IE5VTEw7CiAKICByZXR1cm4obm9kZSk7Cn0KCmJvb2wgaXNCU1Qoc3RydWN0IG5vZGUqIHJvb3QpCnsKICAgIHN0YXRpYyBzdHJ1Y3Qgbm9kZSAqcHJldiA9IE5VTEw7CiAgICAgCiAgICAvLyB0cmF2ZXJzZSB0aGUgdHJlZSBpbiBpbm9yZGVyIGZhc2hpb24gYW5kIGtlZXAgdHJhY2sgb2YgcHJldiBub2RlCiAgICBpZiAoIXJvb3QpCiAgICAgIHJldHVybiB0cnVlOwogIAogICAgICAgIGlmICghaXNCU1Qocm9vdC0+bGVmdCkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAvLyBBbGxvd3Mgb25seSBkaXN0aW5jdCB2YWx1ZWQgbm9kZXMgCiAgICAgICAgaWYgKHByZXYgIT0gTlVMTCAmJiByb290LT5kYXRhIDw9IHByZXYtPmRhdGEpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICBwcmV2ID0gcm9vdDsKIAogICAgICAgIHJldHVybiBpc0JTVChyb290LT5yaWdodCk7CiAKIAp9CiAKLyogRHJpdmVyIHByb2dyYW0gdG8gdGVzdCBhYm92ZSBmdW5jdGlvbnMqLwppbnQgbWFpbigpCnsKICBzdHJ1Y3Qgbm9kZSAqcm9vdCA9IG5ld05vZGUoMTAwKTsKICByb290LT5yaWdodCAgICAgICA9IG5ld05vZGUoMTAxKTsKICByb290LT5sZWZ0ID0gbmV3Tm9kZSg0KTsKCiAKICBpZihpc0JTVChyb290KSkKICAgIHByaW50ZigiSXMgQlNUIik7CiAgZWxzZQogICAgcHJpbnRmKCJOb3QgYSBCU1QiKTsKICAgICAKICBnZXRjaGFyKCk7CiAgcmV0dXJuIDA7Cn0gIA==