Dev - C++ - Arbol binario c++ Ayuda

 
Vista:
sin imagen de perfil

Arbol binario c++ Ayuda

Publicado por javier (1 intervención) el 28/07/2017 20:16:56
Buenas una consulta, es un arbol binario donde el nodo raiz debe tener el numero mayor, y los demas tienen que ir entrando al arbol por orden de llegada, cumpliendo que cada nodo tenga dos hijos, de izquierda a derecha, pero no me esta realizando el arbol, cuando ejecuto el post orden me da solo el numero 7 y borra los demas numeros.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include<iostream>
#include<cstdlib>
using namespace std;
 
int arreglo[100];
int contador=0;
int numNodos;
 
struct nodo{
	int num;
	struct nodo *izq, *der;
};
 
typedef struct nodo *PER;
 
 
//aqui debe buscar el primer nodo disponible de izquierda a derecha
PER Hijos(PER &arbol){
 
	if(arbol->izq==NULL){
		return arbol->izq;
	}else if(arbol->der==NULL){
		return arbol->der;
	}else{
		Hijos(arbol->izq);
		Hijos(arbol->der);
	}
}
 
PER crearNodo(int x)
{
	PER nuevoNodo = new(struct nodo);
	nuevoNodo->num = x;
	nuevoNodo->izq = NULL;
	nuevoNodo->der = NULL;
	return nuevoNodo;
}
 
 
void Insertar(PER &arbol,int x){
 
		arbol=crearNodo(x);
 
}
 
//debe evaluar el nodo si es mayor o menor al que esta entrando
void NodoMayor(PER &pos,int x){
 
	PER hijo=NULL;
 
	if(pos==NULL){
		pos=crearNodo(x);
	}else if(pos->num<x){
		int aux=pos->num;
		pos->num=x;
		hijo=Hijos(pos);
		Insertar(hijo,x);
		//llamar al metodo que aun no cree
	}else{
         	hijo=Hijos(pos);
		Insertar(hijo,x);
}
}
 
void preOrden(PER pin)
{
	if(pin!=NULL)
	{
		cout << pin->num <<" ";
		preOrden(pin->izq);
		preOrden(pin->der);
	}
}
 
void enOrden(PER pin){
	if(pin!=NULL)
	{
		enOrden(pin->izq);
		cout << pin->num << " ";
		enOrden(pin->der);
	}
}
 
void postOrden(PER arbol)
{
	if(arbol!=NULL)
	{
		postOrden(arbol->izq);
		postOrden(arbol->der);
		cout << arbol->num<< " ";
	}
}
 
int main (int argc, char *argv[]) {
 
	PER arbol=NULL;
 
	cout << "\n\t\t  ..[ ARBOL BINARIO DE BUSQUEDA ]..  \n\n";
 
	cout << " Numero de nodos del arbol:  ";
	cin >> numNodos;
	cout << endl;
 
	for(int i=0; i<numNodos; i++)
	{
		cout << " Numero del nodo " << i+1 << ": ";
		cin >> arreglo[i];
		NodoMayor(arbol,arreglo[i]);
	}
 
	//preOrden(per);
	//enOrden(per);
	postOrden(arbol);
 
	return 0;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Sergio Can
Val: 58
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Arbol binario c++ Ayuda

Publicado por Sergio Can (23 intervenciones) el 06/08/2017 21:20:24
Tú función de insertar solo crea un nodo, pero nunca se le está añadiendo al padre.

En todo caso la función de insertar debería contener 2 parámetros

En pseudocódigo
1
2
3
4
insertar(raíz/padre, hijo){
 //Insertar al padre si algún hijo es nulo
// si están ocupados recorrer de forma recursiva
}

O bien
1
2
3
4
5
6
Insertar(raíz/padre, dato){
//Crear nodo para el dato
//Recorrer o comprobar que hijo del padre está vacío
//Insertar a ese hijo de manera recursiva
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar