Árbol binario de búsqueda en C++

En un intento de comprender mejor los punteros en C++, decidi programar un arbol de busqueda binaria, ya que cada nodo debe tener 2 punteros hacia su nodos hijos.

Un buen lugar para aprender sobre como funcionan los punteros es una de las revistas de HACKXCRACK, solamente son 15 paginas:

http://www.hackxcrack.es/cuadernos/punteros/Hack_x_Crack_Punteros.pdf

Bueno para que poner toda la descripción de lo que es un árbol binario de búsqueda si en google hay cientos de paginas que dicen lo mismo.

Así que les comparto el código que hice:

#include <iostream>

using namespace std;

struct nodo{
int valor;
nodo* izq;
nodo* der;
nodo(){
valor = (1<<30);
izq = NULL;
der = NULL;
}
nodo(int _v){
valor = _v;
izq = NULL;
der = NULL;
}
};

void insertar(int val, nodo **n){
if((*n) == NULL)
*n = new nodo(val);
else
if(val > (*n)->valor)
insertar(val, &((*n)->der));
else
insertar(val, &((*n)->izq));
}

void preorden(nodo *n){
if(n != NULL){
cout << (n->valor) << " ";
preorden(n->izq);
preorden(n->der);
}
}

void inorden(nodo *n){
if(n != NULL){
inorden(n->izq);
cout << (n->valor) <<" ";
inorden(n->der);
}
}

void postorden(nodo *n){
if(n != NULL){
postorden(n->izq);
postorden(n->der);
cout << (n->valor) << " ";
}
}

int main(){
nodo *raiz;

raiz = NULL;
int nro,tmp;
cin >> nro;
while(nro--){
cin >> tmp;
insertar(tmp, &raiz);
}

cout << "PRE-ORDEN" << endl;
preorden(raiz);
cout <<endl<< "-------------" << endl;
cout << "IN-ORDEN" << endl;
inorden(raiz);
cout <<endl<< "-------------" << endl;
cout << "POST-ORDEN" << endl;
postorden(raiz);
cout <<endl<< "-------------" << endl;
return 0;
}

En ideone:

By branimir
ACM-ICPC UMSA Student Chapter Member