The following java method will determine if a binary tree is AVL (and, obviously BST)
/**
* This recursive method will calculate if a tree is AVL by returning
* its max depth.
*
* @param t
* @param p
* @return Max depth of the binary tree if it's avl else -1
**/
static int isAVL(Node t, int p){
int fl = 0; // This is the left factor
int fr = 0; // This is the right factor
if(t.hasLeft()){
if(key(t.leftChild() > key(t))) return -1;
fl = isAVL(t.leftChild(), p + 1);
}
if(t.hasRight()){
if(key(t.rightChild()) < key(t)) return -1;
fr = isAVL(t.rightChild(), p + 1);
}
if(fr == -1 || fl == -1) return -1;
if(abs(fr - fl) == 0 || abs(fr - fl) == 1) return max(fl, fr, p);
else return -1;
}