private boolean isMatch(BSTNode<T> haysack, BSTNode<T> needle) {
        // if both the nodes are null its considered as match
        if(haysack == null && needle == null) {
            return true;
        }
        // if one of them is null and other one is not .. consider it as not match
        if((haysack == null && needle!= null)|| (needle == null && haysack != null)) {
            return false;
        }
        // finally compare the data .. if the data does not match return right from here
        if(haysack.data.compareTo(needle.data) != 0){
            return false;
        }

        // if everything has been succeded till this far .. procedd to left and right subtree of both
        return isMatch(haysack.left, needle.left) && isMatch(haysack.right, needle.right);
    }