C Program
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
typedef struct N { int d; struct N *l, *r; } N;
N* n(int d) { N* t = malloc(sizeof(N)); t->d = d; t->l = t->r = NULL; return t; }
int isBST(N* r, int min, int max) {
if (!r) return 1;
if (r->d <= min || r->d >= max) return 0;
return isBST(r->l, min, r->d) && isBST(r->r, r->d, max);
}
int main() {
N *r = n(10);
r->l = n(5); r->r = n(15);
r->r->l = n(6); // violates BST
printf("%s", isBST(r, INT_MIN, INT_MAX) ? "Valid" : "Invalid");
}C Output
Input:
10
/ \
5 15
/
6
Output:
Invalid
C++ Program
#include <iostream>
#include <climits>
using namespace std;
struct N { int d; N *l, *r; N(int v): d(v), l(0), r(0) {}; };
bool isBST(N* r, int min, int max) {
if (!r) return true;
if (r->d <= min || r->d >= max) return false;
return isBST(r->l, min, r->d) && isBST(r->r, r->d, max);
}
int main() {
N* r = new N(20);
r->l = new N(10); r->r = new N(30);
r->r->l = new N(25);
cout << (isBST(r, INT_MIN, INT_MAX) ? "Valid" : "Invalid");
}C++ Output
Input:
20
/ \
10 30
/
25
Output:
Valid
JAVA Program
class N {
int d; N l, r;
N(int d) { this.d = d; }
}
public class Main {
static boolean isBST(N r, int min, int max) {
if (r == null) return true;
if (r.d <= min || r.d >= max) return false;
return isBST(r.l, min, r.d) && isBST(r.r, r.d, max);
}
public static void main(String[] a) {
N r = new N(5);
r.l = new N(3); r.r = new N(8);
r.l.l = new N(1); r.l.r = new N(4);
System.out.println(isBST(r, Integer.MIN_VALUE, Integer.MAX_VALUE) ? "Valid" : "Invalid");
}
}JAVA Output
Input:
5
/ \
3 8
/ \
1 4
Output:
Valid
Python Program
class N:
def __init__(s, d): s.d, s.l, s.r = d, None, None
def isBST(r, mn, mx):
if not r: return True
if not (mn < r.d < mx): return False
return isBST(r.l, mn, r.d) and isBST(r.r, r.d, mx)
r = N(10)
r.l = N(5); r.r = N(15)
r.r.l = N(12); r.r.r = N(18)
print("Valid" if isBST(r, float('-inf'), float('inf')) else "Invalid")Python Output
Input:
10
/ \
5 15
/ \
12 18
Output:
Valid

Social Plugin