hola compañero aqui te dejo el codigo ya modificado a lo que necesitas
  
Código:
 // nodo1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
//#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NULL 0
//
//Programa que carga los nodos de un �rbol binario en memoria.
struct treenodo {
	struct treenodo *izqptr;  //puntero al nodo izquierdo
	char dato[40];     //dato del nodo
	struct treenodo *derptr; // puntero al nodo derecho
};
void crear(treenodo *nodo){ //crea un �arbol binario
	char resp[2];
	printf("Entre el dato ");
	gets (nodo->dato);
	printf("Hay nodos a la Izquierda entre S/N ");
	gets(resp);
	if (strcmp(resp, "S")== 0) {
		nodo->izqptr= new treenodo();
		crear(nodo->izqptr); }
	else
		nodo->izqptr=NULL;
	printf("Hay nodos a la Derecha entre S/N ");
	gets(resp);
	if (strcmp(resp, "S")== 0) {
		nodo->derptr= new treenodo();
		crear(nodo->derptr); }
	else
		nodo->derptr=NULL;
	return;
}
//Recorrido en Pre-Orden
void preorden(treenodo *nodo){
	if (nodo != NULL) {
		printf("%s", (*nodo).dato);
		preorden(nodo->izqptr);
		preorden(nodo->derptr);
	}
}
void main(int){
	treenodo *nodo;   // puntero al nodo
	nodo= new treenodo();
	crear(nodo);
	preorden(nodo);
	getch();
}
  por cierto lo hice en vc++ 2008 por eso los archivos de cabecera comentados 
 
basicamente lo que movi fue que la veriable resp necesitaba otro espacio debido a que el gets guarda el \0 y el siguiente error era que estabas inicializando mal debe ser asi: new treenodo(); y no asi: new (treenodo);   
saludos 
Anubis_Slash  
EDITO: como nota te recomiendo que validez la S en minuscula ( s ) y la N en minuscula tambien para que pueda acceder al apartado que deseas, asi como al momento de imprimir los datos hacerlo con saltos de linea.....