Have been trying to write a piece of code, that will allow me to spot weather a tree is a correct Binary Tree, or not.

I feel im quite close to cracking it, but the whole thing is now really confusing me. Can anyone see where im going wrong?

Code:
procedure TraverseTree(var flag: integer;t: BinaryTree);
// Traverse Tree
  Begin

    If t <> nil then
      Begin
        with t^ do
          TraverseTree(flag, t^.left);
            if ((t^.left<> nil) AND (t^.right <> nil)) Then
              begin
                if t^.left.data > t.data then
                  flag := flag + 1
                else
                  flag := flag;
              end;
          TraverseTree(flag, t^.right);
            if ((t^.left<> nil) AND (t^.right <> nil)) Then
              begin
                if t^.right.data < t.data then
                  flag := flag + 1
                else
                  flag := flag;
              end
      End

  End;


function IsItABinarySearchTree(t:BinaryTree): TAnswer;

var ans: TAnswer;
    flag: integer;
begin

  flag := 0;
  ans.known := true;
  TraverseTree(flag, t);


  If flag = 0 then
    ans.answer := true
  Else
    ans.answer := False;

  IsItABinarySearchTree := ans
End;
Any help would be great. Thanks