Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- //Juanjose Tenorio Peña
- typedef struct nodo{
- int valor;
- struct nodo* ptrHI;
- struct nodo* ptrHD;
- } TNodo;
- TNodo* aux;
- void crear_arbol(TNodo ** ptrRaiz);
- void inserta_nodo(TNodo **ptrRaiz, int valor);
- void insertar_espejo(TNodo **, int valor);
- TNodo* Arbol_espejo(TNodo*);
- int es_nodo_hoja(TNodo *);
- void pre_orden(TNodo * ptrRaiz);
- void crear_arbol(TNodo ** ptrRaiz){
- *ptrRaiz = NULL;
- }
- void inserta_nodo(TNodo **ptrRaiz, int valor){
- TNodo *ptrHoja, *ptrRecorrido, *ptrPadre;
- ptrHoja = (TNodo*)malloc(sizeof(TNodo));
- ptrHoja->valor = valor;
- ptrHoja->ptrHI=ptrHoja->ptrHD=NULL;
- if(*ptrRaiz){
- ptrRecorrido = *ptrRaiz;
- ptrPadre = NULL;
- while (ptrRecorrido){
- ptrPadre = ptrRecorrido;
- if (ptrRecorrido->valor > valor)
- ptrRecorrido = ptrRecorrido->ptrHI;
- else
- ptrRecorrido = ptrRecorrido->ptrHD;
- }
- if (ptrPadre->valor > valor)
- ptrPadre->ptrHI = ptrHoja;
- else
- ptrPadre->ptrHD = ptrHoja;
- }
- else{
- *ptrRaiz = ptrHoja;
- }
- }
- void insertar_espejo(TNodo **ptrRaiz, int valor){
- TNodo *ptrHoja, *ptrRecorrido, *ptrPadre;
- ptrHoja = (TNodo*)malloc(sizeof(TNodo));
- ptrHoja->valor = valor;
- ptrHoja->ptrHI=ptrHoja->ptrHD=NULL;
- if(*ptrRaiz){
- ptrRecorrido = *ptrRaiz;
- ptrPadre = NULL;
- while (ptrRecorrido){
- ptrPadre = ptrRecorrido;
- if (ptrRecorrido->valor < valor)
- ptrRecorrido = ptrRecorrido->ptrHI;
- else
- ptrRecorrido = ptrRecorrido->ptrHD;
- }
- if (ptrPadre->valor < valor)
- ptrPadre->ptrHI = ptrHoja;
- else
- ptrPadre->ptrHD = ptrHoja;
- }
- else{
- *ptrRaiz = ptrHoja;
- }
- }
- int es_nodo_hoja(TNodo *ptrRaiz){
- if (ptrRaiz->ptrHI ==NULL) return 1;
- if (ptrRaiz->ptrHD ==NULL) return 1;
- return 0;
- }
- TNodo* Arbol_espejo(TNodo* raiz){
- TNodo*aux1;
- if(raiz!=NULL){
- insertar_espejo(&aux,raiz->valor);//inserto valor en raiz;
- if(es_nodo_hoja(raiz)){
- return aux;
- }else{
- if(raiz->ptrHI!=NULL)
- aux1=Arbol_espejo(raiz->ptrHI);//espejo
- if (raiz->ptrHD!=NULL)
- aux1=Arbol_espejo(raiz->ptrHD);
- }
- aux1=aux;
- return aux;
- }
- }
- void pre_orden(TNodo * ptrRaiz){
- if (ptrRaiz){
- printf("%d - ", ptrRaiz->valor);
- pre_orden(ptrRaiz->ptrHI);
- pre_orden(ptrRaiz->ptrHD);
- }
- }
- int main(int argc, char** argv) {
- TNodo *ptrRaiz;TNodo*ptEspejo;
- crear_arbol(&ptrRaiz);
- crear_arbol(&aux);
- inserta_nodo(&ptrRaiz, 4);
- inserta_nodo(&ptrRaiz, 2);
- inserta_nodo(&ptrRaiz, 1);
- inserta_nodo(&ptrRaiz, 3);
- inserta_nodo(&ptrRaiz, 5);
- pre_orden(ptrRaiz);
- printf("\n");
- ptEspejo=Arbol_espejo(ptrRaiz);
- pre_orden(ptEspejo);
- return (EXIT_SUCCESS);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement