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