Está en la página 1de 2

1: //MARIN_JUAREZ

2: //HERNANDEZ_RAMOS
3: //REYES_ALLENDE
4: //SAMPEDRO_CRUZ
5:
6: #include "ArbolBB.h"
7: #include <iostream>
8: #include <fstream>
9: #include <string>
10:
11: using namespace std;
12:
13: ArbolBB::ArbolBB()
14: {
15: this->raiz = NULL;
16: }
17:
18: ArbolBB::~ArbolBB()
19: {
20: if (raiz)
21: {
22: cout << "Datos que quedaron en el arbol:" << endl; 23: borraTodo(raiz);
24: }
25: }
26:
27: void ArbolBB::insertaUnNodo(int dato)
28: {
29: insertaUnNodo(dato, this->raiz);
30: }
31:
32: void ArbolBB::preOrden(void)
33: {
34: NodoA* actual = this->raiz;
35: preOrden(actual);
36: }
37:
38: void ArbolBB::postOrden(void)
39: {
40: NodoA* actual = this->raiz;
41: postOrden(actual);
42: }
43:
44: void ArbolBB::borraTodo(void)
45: {
46: borraTodo(raiz);
47: }
48:
49: void ArbolBB::entreOrden(void)
50: {
51: NodoA* actual = this->raiz;
52: entreOrden(actual);
53: }
54:
55: void ArbolBB::insertaUnNodo(int dato, NodoA* &aux) 56: {
57: if (aux == NULL)
58: aux = new NodoA(dato);
59: else
60: {
61: if (dato <= aux->dameTuDato())
62: insertaUnNodo(dato, aux->dameTuIzquierdo()); 63: else
64: insertaUnNodo(dato, aux->dameTuDerecho()); 65: }
66: }
67:
68: void ArbolBB::borraTodo(NodoA *&aux)
69: {
70: if (aux)
71: {
72: borraTodo(aux->dameTuIzquierdo());
73: borraTodo(aux->dameTuDerecho());
74: delete aux;
75: aux = NULL;
76: }
77: }
78:
79: void ArbolBB::preOrden(NodoA *aux)
80: {
81: if (aux != NULL)
82: {
83: cout << aux->dameTuDato() << " ";
84: preOrden(aux->dameTuIzquierdo());
85: preOrden(aux->dameTuDerecho());
86: }
87: }
88:
89: void ArbolBB::postOrden(NodoA *aux)
90: {
91: if (aux != NULL)
92: {
93: postOrden(aux->dameTuIzquierdo());
94: postOrden(aux->dameTuDerecho());
95: cout << aux->dameTuDato() << " ";
96: }
97: }
98:
99: void ArbolBB::entreOrden(NodoA *aux)
100: {
101: if (aux)
102: {
103: entreOrden(aux->dameTuIzquierdo());
104: cout << aux->dameTuDato() << " ";
105: entreOrden(aux->dameTuDerecho());
106: }
107: }
108:
109: NodoA* ArbolBB::nodoPadre(int dato)
110: {
111: NodoA* actual = this->raiz;
112:
113: if (actual == NULL)
114: {
115: cout << "El arbol esta vacio" << endl;
116: return NULL;
117: }
118:
119: if (actual->dameTuDato() == dato)
120: {
121: cout << "El nodo es la raiz, no tiene padre" << endl;
122: return NULL;
123: }
124:
125: NodoA* padre = nodoPadreRecursivo(actual, dato);
126: if (padre == NULL)
127: {
128: cout << "No se encontró el nodo con dato: " << dato << endl; 129: }
130:
131: return padre;
132: }
133:
134: NodoA* ArbolBB::nodoPadreRecursivo(NodoA* nodo, int dato)
135: {
136: if (nodo == NULL)
137: return NULL;
138:
139: if ((nodo->dameTuIzquierdo() != NULL && nodo->dameTuIzquierdo()->dameTuDato() == dato) 140: (nodo-
>dameTuDerecho() != NULL && nodo->dameTuDerecho()->dameTuDato() == dato)) 141: {
142: return nodo;
143: }
144:
145: NodoA* padreIzquierdo = nodoPadreRecursivo(nodo->dameTuIzquierdo(), dato); 146: if (padreIzquierdo !
= NULL)
147: {
148: return padreIzquierdo;
149: }
150:
151: NodoA* padreDerecho = nodoPadreRecursivo(nodo->dameTuDerecho(), dato); 152: if
(padreDerecho != NULL)
153: {
154: return padreDerecho;
155: }
156:
157: return NULL;
158: }
159:

También podría gustarte