Algorithm to determine if binary tree is a Binary Search Tree (BST)
You can tremendously reduce the memory requirements of this code by acknowledging that you can replace the lists you use by single values:
private static bool IsBinarySearchTree(Node root, int max, int min)

this allows you to successively tighten the bounds on subtrees without storing the values you traversed in a list:
public static bool IsBinarySearchTree() 
{
    var valid = true;
    // could be simplified to a single expression, but this is easier to understand
    valid &amp;= IsBinarySearchTree(_root.Left, _root.Value, Int.MIN_VALUE);
    valid &amp;= IsBinarySearchTree(_root.Right, Int.MAX_VALUE, _root.Value);
    return valid;

}

This should already be enough to write the recursive method and I think you'll learn more if I don't spoil this for you :)
But if you want a spoiler...

 private static bool IsBinarySearchTree(Node root, int max, int min)
 {
      // if there's no node
      if (root == null)  return true;
      if (root.Value &lt;= min || root.Value &gt;= max)
      {
          return false;
      }
      return IsBinarySearchTree(root.Left, root.Value, min)
        &amp;&amp; IsBinarySearchTree(root.Right, max, root.Value);
 }

This simplification is possible because you only need store the smallest larger element and the largest smaller element to be able to guarantee that relation holds for the node you're currently examining.