Java - Imprimir Arbol binario

 
Vista:
sin imagen de perfil

Imprimir Arbol binario

Publicado por Felipe (1 intervención) el 27/11/2016 21:37:11
Consulta amigos necesito imprimr un arbol binario en forma de arbol. En el siguiente codigo solamente me lo muestra por niveles. quisiera saber algun metodo para imprimirlo en forma de arbol. Saludos espero que me ayuden.
O
/ \
O O OO

Clase Arbol.-

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
public class ArbolBinario {
    NodoArbolBinario raiz;
 
    public ArbolBinario(){
        raiz=null;
    }
 
    public ArbolBinario(int valor, String dato){
        raiz= new NodoArbolBinario(valor, dato);
    }
    public void inserta(int valor, String dato){
        NodoArbolBinario nuevo= new NodoArbolBinario(valor, dato);
        if(raiz == null){
            raiz = nuevo; //apunta al nuevo nodo
        }
        else{
            NodoArbolBinario padre = elPadreDe(valor);
            if(valor >= padre.valor)
                padre.hijoDerecho=nuevo;
            else
                padre.hijoIzquierdo=nuevo;
 
            }
 
        }
 
    public NodoArbolBinario elPadreDe(int valor){
       // NodoArbolBinario tmp=raiz;
        NodoArbolBinario padre= BuscarElPadre(valor, raiz);
        return padre;
    }
 
    public NodoArbolBinario BuscarElPadre(int valor, NodoArbolBinario tmp){
 
        if (valor >= tmp.valor && tmp.hijoDerecho!=null ){
            tmp= tmp.hijoDerecho;
            BuscarElPadre(valor, tmp);
        }
        if(valor < tmp.valor && tmp.hijoIzquierdo!=null ){
            tmp=tmp.hijoIzquierdo;
        BuscarElPadre(valor, tmp);
        }
        if (valor >= tmp.valor && tmp.hijoDerecho == null){
            return tmp;
        }
        if (valor < tmp.valor && tmp. hijoIzquierdo == null){
            return tmp;
        }
        return null;
    }
 
    public void mostrar(){
        mostrar(raiz);
    }
 
    public void mostrar(NodoArbolBinario tmp){
        tmp.mostrar();
        if(tmp.hijoIzquierdo!=null)
            mostrar(tmp.hijoIzquierdo);
        if(tmp.hijoDerecho!=null)
            mostrar(tmp.hijoDerecho);
    }
 
    public void mostrarPreOrden(){
        mostrarPreOrden(raiz);
    }
 
    public void mostrarPreOrden(NodoArbolBinario tmp){
        tmp.mostrar();
        if(tmp.hijoIzquierdo!=null)
            mostrarPreOrden(tmp.hijoIzquierdo);
        if(tmp.hijoDerecho!=null)
            mostrarPreOrden(tmp.hijoDerecho);
 
}
    public void mostrarInOrden(){
        mostrarInOrden(raiz);
    }
    public void mostrarInOrden(NodoArbolBinario tmp){
 
        if(tmp.hijoIzquierdo!=null)
            mostrarInOrden(tmp.hijoIzquierdo);
        tmp.mostrar();
        if(tmp.hijoDerecho!=null)
            mostrarInOrden(tmp.hijoDerecho);
 
}
    public void mostrarPostOrden(){
        mostrarInOrden(raiz);
    }
    public void mostrarPostOrden(NodoArbolBinario tmp){
 
        if(tmp.hijoIzquierdo!=null)
            mostrarPostOrden(tmp.hijoIzquierdo);
        tmp.mostrar();
        if(tmp.hijoDerecho!=null)
            mostrarPostOrden(tmp.hijoDerecho);
 
}
 
    private void imprimirEntreConNivel(NodoArbolBinario tmp, int nivel){
        if(tmp !=null){
            imprimirEntreConNivel(tmp.hijoIzquierdo,nivel+1);
 
                    System.out.println(tmp.valor + "("+nivel+") - ");
                    imprimirEntreConNivel(tmp.hijoDerecho,nivel+1);
        }
    }
 
public void imprimirEntreConNivel(){
imprimirEntreConNivel(raiz,1);
System.out.println();
}
}


Clase NodoArboBinario

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class NodoArbolBinario {
    int valor;//referenciar el número para búsqueda
    String dato;
    NodoArbolBinario hijoIzquierdo;
    NodoArbolBinario hijoDerecho;
 
    public NodoArbolBinario( int valor, String dato){
        this.dato=dato;
        this.valor=valor;
        hijoDerecho=null;
        hijoIzquierdo=null;
        }
 
    public void mostrar(){
        System.out.println("valor: "+ valor+ " dato: "+ dato);
    }
 
}


Clase prueba.

1
2
3
4
5
6
7
8
9
10
11
12
public static void main(String[] args) {
 
        ArbolBinario a = new ArbolBinario();
        a.inserta(39, "Claudio");
        a.inserta(45, "jean");
        a.inserta(30,"esteban");
        a.inserta(70, "patrick");
 
        a.imprimirEntreConNivel();
    }
 
}
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