Problema al formar un arbol binario
Publicado por Jahir (3 intervenciones) el 03/10/2018 09:53:50
Hola, buenas noches/tardes/días.
Estoy intentando hacer un árbol binario aparir de una lista doblemente enlazada, la idea es que reciba una operación como: 5*9*8= y me forme un árbol con esa cadena. No he incluido lo que debe hacer cuando ingreso los operadores de suma y resta porque este error no me deja avanzar.
Mi problema es que al llegar a la linea 50 cuando trato de asignarle un valor nulo a la hoja izquierda de la raíz de mi árbol, me cambia el valor de todas las variables a null. No logro identificar por que... si alguien puede darme una pista lo agradecería mucho. Dejo mi codigo a continuacion y la carpeta del proyecto, el error se encuentra en el codigo insertarArbol() de la clase lista.
Estoy intentando hacer un árbol binario aparir de una lista doblemente enlazada, la idea es que reciba una operación como: 5*9*8= y me forme un árbol con esa cadena. No he incluido lo que debe hacer cuando ingreso los operadores de suma y resta porque este error no me deja avanzar.
Mi problema es que al llegar a la linea 50 cuando trato de asignarle un valor nulo a la hoja izquierda de la raíz de mi árbol, me cambia el valor de todas las variables a null. No logro identificar por que... si alguien puede darme una pista lo agradecería mucho. Dejo mi codigo a continuacion y la carpeta del proyecto, el error se encuentra en el codigo insertarArbol() de la clase lista.
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
public class Nodo {
//Variables
private char dato;
private boolean flag = false;
private Nodo izq;
private Nodo der;
private Nodo Raiz;
//Constructor
public Nodo(){}
public Nodo(char dato){
this.dato = dato;
}
//Para saber el nodo izquierdo
public Nodo getNodoIzquierdo(){
return izq;
}
//Para saber el nodo derecho
public Nodo getNodoDerecho(){
return der;
}
//Se crea nodo derecho
public void setNodoDerecho(Nodo nodo){
der = nodo;
}
//Se crea nodo Izquierdo
public void setNodoIzquierdo(Nodo nodo){
izq = nodo;
}
public char getDato(){
return dato;
}
public void setDato(char dato)
{
this.dato = dato;
}
public boolean getFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
/**
* @return the Raiz
*/
public Nodo getRaiz() {
return Raiz;
}
/**
* @param Raiz the Raiz to set
*/
public void setRaiz(Nodo Raiz) {
this.Raiz = Raiz;
}
}
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
public class Lista
{
private Nodo Raiz;
Nodo nuevo;
Nodo arbol;
Nodo actual;
public Lista()
{
}
public void insertar(char caracter)
{
nuevo = null;
if(getRaiz() == null)
{
Raiz = new Nodo(caracter);
}
else if (getRaiz() != null)
{
nuevo = new Nodo(caracter);
getRaiz().setNodoDerecho(nuevo);
nuevo.setNodoIzquierdo(getRaiz());
Raiz = nuevo;
}
}
public void mostrar()
{
actual = Raiz;
while(actual != null)
{
System.out.println(actual.getDato());
actual = actual.getNodoIzquierdo();
}
}
public Nodo insertarArbol()
{
actual = Raiz;
while(actual != null)
{
if(arbol == null)
{
nuevo = actual;
//El problema esta aqui abajo
nuevo.setNodoIzquierdo(null);
arbol = nuevo;
actual = actual.getNodoIzquierdo();
actual = Raiz.getNodoIzquierdo();
}
else if(actual.getDato() == '*' || actual.getDato() == '/' )
{
nuevo = actual;
nuevo.getNodoDerecho().setFlag(true);
nuevo.getNodoIzquierdo().setFlag(false);
nuevo.setNodoIzquierdo(actual.getNodoIzquierdo());
nuevo.getNodoIzquierdo().setNodoIzquierdo(null);
nuevo.getNodoIzquierdo().setNodoDerecho(null);
nuevo.setNodoDerecho(actual.getNodoDerecho());
nuevo.getNodoDerecho().setNodoDerecho(null);
nuevo.getNodoDerecho().setNodoIzquierdo(null);
nuevo.setRaiz(arbol);
arbol = nuevo.getNodoIzquierdo();
actual = actual.getNodoIzquierdo().getNodoIzquierdo();
actual.setNodoDerecho(null);
}
else
{
actual = actual.getNodoIzquierdo();
}
}
}
}
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
import java.util.Scanner;
public class ArbolBinario
{
public static void main(String[] args)
{
//Declaracion de variables
String Operacion;
Nodo nodo;
Lista lista = new Lista();
Scanner sc = new Scanner(System.in);
char caracter;
//Ingresar operacion
System.out.println("Ingresa una operacion");
Operacion = sc.next();
for(int i = 0 ; i < Operacion.length() ; i++)
{
caracter = Operacion.charAt(i);
lista.insertar(caracter);
}
lista.mostrar();
System.out.println("--------------------------------");
lista.insertarArbol();
}
}
- ArbolBinario.rar(21,7 KB)
Valora esta pregunta
0