Java でのシンプルだが洗練された再帰的ソリューション:
public static boolean isBST(TreeNode node, int leftData, int rightData)
{
if (node == null) return true;
if (node.getData() > leftData || node.getData() <= rightData) return false;
return (isBST(node.left, node.getData(), rightData)
&& isBST(node.right, leftData, node.getData()));
}
この関数の最初の呼び出しは、次のようになります。
if (isBST(root, Integer.MAX_VALUE, Integer.MIN_VALUE))
System.out.println("This is a BST.");
else
System.out.println("This is NOT a BST!");
基本的に、有効な範囲 ([ MIN_VALUE, MAX_VALUE] から開始) を作成し続け、再帰的に下降するにつれて、各ノードに対してそれを縮小し続けます。
ソース: http://exceptional-code.blogspot.com/2011/08/binary-search-trees-primer.html