Java - Problema al comparar datos genericos de un Arbol

 
Vista:

Problema al comparar datos genericos de un Arbol

Publicado por Christian Maza (2 intervenciones) el 11/12/2013 03:44:42
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
public class NodoBinario <T >  {
	T dato;
	NodoBinario Hizq, Hder;
	//Constructores
public NodoBinario(){
 
}
NodoBinario (T Elem){
	dato = Elem;
 
	NodoBinario Hizq, Hder = null;
	}
 
	//Insercion de un elemento
public void InsertaBinario (T Elem){
 
		if(Elem<dato){ //Como puedo hacer para comparar estos datos porque me da error
			if (Hizq == null)
				Hizq = new NodoBinario(Elem);
			else
				Hizq.InsertaBinario(Elem);
                }
		else{
			if (Elem > dato){
				if (Hder == null)
					Hder = new NodoBinario (Elem);
				else
					Hder.InsertaBinario(Elem);
			}
 
}
 
}
}
public class Arbol <T>implements Comparable<T>{
    //	Cola Cola = new Cola();
	NodoBinario Padre;
	NodoBinario Raiz;
 
public Arbol(){
		Raiz = null;
	}
 
	//Insercion de un elemento en el arbol
public void InsertaNodo(T Elem){
		if(Raiz == null)
			Raiz = new NodoBinario (Elem);
		else
			Raiz.InsertaBinario(Elem);
 
	}
 
	//Preorden Recursivo del arbol
public void Preorden (NodoBinario Nodo){
		if(Nodo == null)
			return;
		else{
			System.out.print (Nodo.dato + " ");
			Preorden (Nodo.Hizq);
			Preorden (Nodo.Hder);
		}
	}
 
	//PostOrden recursivo del arbol
public void PostOrden (NodoBinario Nodo){
		if(Nodo == null)
			return;
		else{
			PostOrden (Nodo.Hizq);
			PostOrden (Nodo.Hder);
			System.out.print (Nodo.dato + " ");
		}
	}
 
	//Inorden Recursivo del arbol
public void Inorden (NodoBinario Nodo){
		if(Nodo == null)
			return;
		else{
			Inorden (Nodo.Hizq);
			System.out.print(Nodo.dato + " ");
			Inorden (Nodo.Hder);
		}
	}
	//Altura del arbol
	public int Altura (NodoBinario Nodo){
		int Altder = (Nodo.Hder == null? 0:1 + Altura (Nodo.Hder));
		int Altizq = (Nodo.Hizq == null? 0:1 + Altura (Nodo.Hizq));
		return Math.max(Altder,Altizq);
	}
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
sin imagen de perfil

Problema al comparar datos genericos de un Arbol

Publicado por Pedro (81 intervenciones) el 11/12/2013 09:20:25
¿Cuál es el problema?, para facilitar la ayuda es bueno que describas el problema.
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

Problema al comparar datos genericos de un Arbol

Publicado por Christian Maza (2 intervenciones) el 11/12/2013 14:48:13
if(Elem<dato)
Me da error al querer comparar esto porque son datos genericos.Lo que queria saber es como puedo comparar esos dos datos
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
sin imagen de perfil
Val: 22
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Problema al comparar datos genericos de un Arbol

Publicado por José Ramón (7 intervenciones) el 15/12/2020 01:39:31
Estoy estudiando sobre el tema y no sé si es correcto lo que puedo aportar, pero creo que si quieres comparar Elem y dato de un tipo T, éste tipo generico debería heredar Comparable y estar implementado el método compareTo en el tipo pasado a la clase.
Algo como

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
public class NodoBinario<T extends Comparable<T>> { // Aquí T tiene que implementar Comparable
 
	T dato;
 
	NodoBinario<T> Hizq, Hder;
 
	// Constructores
 
	public NodoBinario() {
 
	}
 
	NodoBinario(T Elem) {
 
		dato = Elem;
 
		NodoBinario<T> Hizq, Hder = null;
 
	}
 
	// Insercion de un elemento
 
	public void InsertaBinario(T Elem) {
 
		if (Elem.compareTo(dato) < 0) { // Correción de la manera de comparar
 
			if (Hizq == null)
 
				Hizq = new NodoBinario<>(Elem);
 
			else
 
				Hizq.InsertaBinario(Elem);
 
		}
 
		else {
 
			if (Elem.compareTo(dato) < 0) {
 
				if (Hder == null)
 
					Hder = new NodoBinario<>(Elem);
 
				else
 
					Hder.InsertaBinario(Elem);
 
			}
 
		}
 
	}
 
}
 
 
}

Espero haber ayudado un poco.
Un saludo
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