Está en la página 1de 6

#include<iostream>

#include <stdlib.h>
#include <conio.h>
#include<time.h>
#include<stdio.h>
using namespace std;
typedef struct n{
char dato;
struct n *izq;
struct n *der;
}Nodo;
Nodo *raiz,*r=NULL;
int altura,contador,b,hojas=0;
int cont;
void
void
void
void
void
void
void
void
void
void
void
void
void
void

submenu();
crearArbol();
recorridoPRE();
recorridoPOS();
recorridoEN();
llenarauto();
submenu2();
recorridoPRE_listar();
vaciar();
mostrar();
NumeroHijos();
NumeroNodos();
auxContador(Nodo *raiz);
NumeroH();

void crearArbol(Nodo *&p,int altura,int i){


int n;
if(i<altura){
cout<<" continuar 0: izquierda 1: derecha"<<endl;
cin>>n;
if(n ==0){
p=(Nodo*)malloc(sizeof(Nodo));
p->der = NULL;
p->izq = NULL;
cout<<"ingrese dato: ";
cin>>p->dato;
crearArbol(p->izq,altura,i+1);
crearArbol(p->der,altura,i+1);
}else if(n==1){
p=(Nodo*)malloc(sizeof(Nodo));
p->der = NULL;
p->izq = NULL;
cout<<"ingrese dato: ";
cin>>p->dato;
crearArbol(p->der,altura,i+1);
crearArbol(p->izq,altura,i+1);
}
}
}

void llenarauto(Nodo *&p,int altura,int i){


int b;
if(i<altura){
p=(Nodo*)malloc(sizeof(Nodo));
p->der = NULL;
p->izq = NULL;
b = rand()%24+97;
//b = rand()%25+rand()%65;
p->dato = b;
llenarauto(p->izq,altura,i+1);
llenarauto(p->der,altura,i+1);
}
}
void recorridoPRE_listar(Nodo *p){
if (p!=NULL){
cout<<p->dato;
if(p->izq !=NULL)
{
cout<<"(";
}
recorridoPRE_listar(p->izq);
if(p->izq !=NULL)
{
cout<<",";
}
recorridoPRE_listar(p->der);
if(p->der != NULL)
{
cout<<")";
}
}
}
void recorridoPRE(Nodo *p){
if (p!=NULL){
cout<<p->dato;
recorridoPRE(p->izq);
recorridoPRE(p->der);
}
}
void recorridoPOS(Nodo *p){
if (p!=NULL){
recorridoPOS(p->izq);
recorridoPOS(p->der);
cout<<p->dato;
}
}
void recorridoEN(Nodo *p){
if (p!=NULL){
recorridoEN(p->izq);
cout<<p->dato;
recorridoEN(p->der);

}
}
void submenu(){
int n;
system("CLS");
system ("color 2F");
cout<<"de que altura quiere el arbol"<<endl;
cin>>n;
crearArbol(raiz,n,0);
altura =n;
b =n;
}
void submenu2(){
int a;
system("CLS");
system ("color 2F");
cout<<"altura del arbol"<<endl;
cin>>a;
llenarauto(raiz,a,0);
altura=a;
b = a;
}
void vaciar(Nodo *p){
if(p!=NULL){
vaciar(p->izq);
vaciar(p->der);
free(p);
p=raiz=NULL;
}
}
void NumeroNodos()
{
system ("CLS");
contador = 0;
auxContador(raiz);
cout<<"el numero de nodo es: "<<contador;
getch();
}
void auxContador(Nodo *p)
{
contador++;
if(p->izq) auxContador(p->izq);
if(p->der) auxContador(p->der);
}
void NumeroHijos()
{
system ("CLS");
contador = 0;
auxContador(raiz);
cout<<"el numero de hijos es: "<<contador-1;
getch();
}
void NumeroH(Nodo *p){

if (p!=NULL){
if (p->izq == NULL && p->der == NULL) cont++;
NumeroH(p->izq);
NumeroH(p->der);
}
}

void mostrar(Nodo *p){


if(p != NULL)
{
cout<<p->dato;
cout<<",";
mostrar(p->izq);
mostrar(p->der);
}
}
void menu()
{
int opcion;
int n;
int sigue = 1;
int i=0;
do {
system("CLS");
system ("color 2F");
cout<<"\n\n";
cout<<"\t\t\t??????????????????????????????????\n";
cout<<"\t\t\t?
RECORRIDOS
?\n";
cout<<"\t\t\t??????????????????????????????????\n";
cout<<"\t\t\t?
?\n";
cout<<"\t\t\t? 1 -> CREAR ARBOL
?\n";
cout<<"\t\t\t?
?\n";
cout<<"\t\t\t? 2 -> LLENADO AUTOMATICO
?\n";
cout<<"\t\t\t?
?\n";
cout<<"\t\t\t? 3 -> FORMA DE LISTA
?\n";
cout<<"\t\t\t?
?\n";
cout<<"\t\t\t? 4 -> RECORRIDO PRE
?\n";
cout<<"\t\t\t?
?\n";
cout<<"\t\t\t? 5 -> RECORRIDO POS
?\n";
cout<<"\t\t\t?
?\n";
cout<<"\t\t\t? 6 -> RECORRIDO EN
?\n";
cout<<"\t\t\t?
?\n";
cout<<"\t\t\t? 7 -> VACIAR
?\n";
cout<<"\t\t\t?
?\n";
cout<<"\t\t\t? 8 -> MOSTRAR
?\n";
cout<<"\t\t\t?
?\n";
cout<<"\t\t\t? 9 -> ARBOL LLENO(S/N)
?\n";
cout<<"\t\t\t?
?\n";

cout<<"\t\t\t? 10 -> NUMERO DE HOJAS


?\n";
cout<<"\t\t\t?
?\n";
cout<<"\t\t\t? 11 -> NUMERO DE NODOS
?\n";
cout<<"\t\t\t?
?\n";
cout<<"\t\t\t? 12 -> NUMERO DE HIJOS
?\n";
cout<<"\t\t\t?
?\n";
cout<<"\t\t\t? 13 -> ALTURA DEL ARBOL
?\n";
cout<<"\t\t\t??????????????????????????????????\n";
cout<<"\t\t\t?
ESCOJA...
?\n";
cout<<"\t\t\t?
?\n";
cout<<"\t\t\t??????????????????????????????????\n";
cout<<"\t\t\t??????????????????????????????????\n";
cin>>opcion;
switch(opcion) {
case 1:
submenu();
break;
case 2:
submenu2();
break;
case 3:
system("CLS");
recorridoPRE_listar(raiz);
getche();
break;
case 4:
cout<<"su reccorido preorden es: ";
recorridoPRE(raiz);
getche();
break;
case 5:
cout<<"su reccorido pos orden es: ";
recorridoPOS(raiz);
getche();
break;
case 6:
cout<<"su reccorido en orden es: ";
recorridoEN(raiz);
getche();
break;
case 7:
vaciar(raiz);
cout<<"arbol vacio";
getche();
break;
case 8:
mostrar(raiz);
getche();
break;
case 9:
if (raiz == NULL ){
cout<<"arbol vacio";
}else {
cout<<"arbol lleno";

}
getche();
break;
case 10:
NumeroH(raiz);
cout<<"numero de hojas: "<<cont;
getche();
break;
case 11:
NumeroNodos();
break;
case 12:
NumeroHijos();
break;
case 13:
cout<<"la altura es: "<<altura;
getche();
break;
default:
cout<<"\t\t error"<<endl;
}
} while(sigue);
}
main(){
menu();
system("pause>>null");
}

También podría gustarte