CLASE NODO
public class Nodo {
private Nodo pd;
private Object dato;
private Nodo pi;
public Nodo(Object dato){
this.dato=dato;
pd=null;
pi=null;
}
public Object getDato() {return dato;}
public void setDato(Object dato) {this.dato = dato;}
public Nodo getPd() {return pd;}
public void setPd(Nodo pd) {this.pd = pd;}
public Nodo getPi() {return pi;}
public void setPi(Nodo pi) {this.pi = pi;}
}
private Nodo pd;
private Object dato;
private Nodo pi;
public Nodo(Object dato){
this.dato=dato;
pd=null;
pi=null;
}
public Object getDato() {return dato;}
public void setDato(Object dato) {this.dato = dato;}
public Nodo getPd() {return pd;}
public void setPd(Nodo pd) {this.pd = pd;}
public Nodo getPi() {return pi;}
public void setPi(Nodo pi) {this.pi = pi;}
}
CLASE ARBOL
public class Arbol {
private Nodo Raiz;
public Arbol(){ Raiz=null;}
// insertar(Raiz, Raiz, x)
public boolean arbolVacio(){return Raiz == null;}
public void insertar(Nodo ant, Nodo p, Nodo x){
if (p != null){
if (Integer.parseInt(x.getDato().toString()) > Integer.parseInt(p.getDato().toString())) {
insertar(p, p.getPd(), x);
}else{
insertar(p, p.getPi(), x);
}
}else{
if (arbolVacio()){
Raiz = x;
}else{
if (Integer.parseInt(x.getDato().toString()) > Integer.parseInt(ant.getDato().toString())) {
ant.setPd(x);
}else {
ant.setPi(x);
}
}
}
}
public void imprimir(Nodo p){
if(p != null){
imprimir(p.getPi());
System.out.print(p.getDato()+"; ");
imprimir(p.getPd());
}
}
public Nodo getRaiz() {
return Raiz;
}
public void setRaiz(Nodo raiz) {
Raiz = raiz;
}
public void eliminar(Nodo ant, Nodo p){
if(esNodoHoja(p)){
eliminarNodoHoja(ant, p);
}else{
if (esNodoCon2SubArboles(p)){
eliminarNodoCon2SubArboles(ant, p);
}else{
eliminarNodoCon1SubArnol(ant, p);
}
}
}
public void eliminarNodoHoja(Nodo ant, Nodo p){
if (Raiz != p){
if(ant.getPd() == p){
ant.setPd(null);
}else{
ant.setPi(null);
}
}else{
Raiz = null;
}
}
public void eliminarNodoCon1SubArnol(Nodo ant, Nodo p){
if (Raiz == p){
if(p.getPd() != null){
Raiz = Raiz.getPd();
}else{
Raiz = Raiz.getPi();
}
}else{
if ( ant.getPd() == p){
if(p.getPd() != null){
ant.setPd(p.getPd());
}else{
ant.setPd(p.getPi());
}
}else{
if(p.getPd() != null){
ant.setPi(p.getPd());
}else{
ant.setPi(p.getPi());
}
}
}
}
public boolean esNodoHoja(Nodo p){return (p.getPi() == null && p.getPd() == null);}
public boolean esNodoCon2SubArboles(Nodo p){return (p.getPi() != null && p.getPd() != null);}
private Nodo Raiz;
public Arbol(){ Raiz=null;}
// insertar(Raiz, Raiz, x)
public boolean arbolVacio(){return Raiz == null;}
public void insertar(Nodo ant, Nodo p, Nodo x){
if (p != null){
if (Integer.parseInt(x.getDato().toString()) > Integer.parseInt(p.getDato().toString())) {
insertar(p, p.getPd(), x);
}else{
insertar(p, p.getPi(), x);
}
}else{
if (arbolVacio()){
Raiz = x;
}else{
if (Integer.parseInt(x.getDato().toString()) > Integer.parseInt(ant.getDato().toString())) {
ant.setPd(x);
}else {
ant.setPi(x);
}
}
}
}
public void imprimir(Nodo p){
if(p != null){
imprimir(p.getPi());
System.out.print(p.getDato()+"; ");
imprimir(p.getPd());
}
}
public Nodo getRaiz() {
return Raiz;
}
public void setRaiz(Nodo raiz) {
Raiz = raiz;
}
public void eliminar(Nodo ant, Nodo p){
if(esNodoHoja(p)){
eliminarNodoHoja(ant, p);
}else{
if (esNodoCon2SubArboles(p)){
eliminarNodoCon2SubArboles(ant, p);
}else{
eliminarNodoCon1SubArnol(ant, p);
}
}
}
public void eliminarNodoHoja(Nodo ant, Nodo p){
if (Raiz != p){
if(ant.getPd() == p){
ant.setPd(null);
}else{
ant.setPi(null);
}
}else{
Raiz = null;
}
}
public void eliminarNodoCon1SubArnol(Nodo ant, Nodo p){
if (Raiz == p){
if(p.getPd() != null){
Raiz = Raiz.getPd();
}else{
Raiz = Raiz.getPi();
}
}else{
if ( ant.getPd() == p){
if(p.getPd() != null){
ant.setPd(p.getPd());
}else{
ant.setPd(p.getPi());
}
}else{
if(p.getPd() != null){
ant.setPi(p.getPd());
}else{
ant.setPi(p.getPi());
}
}
}
}
public boolean esNodoHoja(Nodo p){return (p.getPi() == null && p.getPd() == null);}
public boolean esNodoCon2SubArboles(Nodo p){return (p.getPi() != null && p.getPd() != null);}
CLASE ARBOL APLICACION
import java.io.InputStreamReader;
public class ArbolAplicacion {
Arbol miArbol;
BufferedReader entrada;
public ArbolAplicacion(){
miArbol = new Arbol();
entrada = new BufferedReader(new InputStreamReader(System.in));
}
public void generar()throws Exception{
// Nodo p = miArbol.getRaiz();
char op='s';
while(op !='n' && op!='N'){
System.out.println(" Ingrese elemento");
Object elem = entrada.readLine();
Nodo x = new Nodo(elem);
miArbol.insertar(miArbol.getRaiz(), miArbol.getRaiz(), x);
System.out.println(" Continuar enter/ n");
String opcion=entrada.readLine();
opcion=opcion.equals("")?"a":opcion;
op = opcion.charAt(0);
}
}
public void eliminarNodo()throws Exception{
// Nodo p = miArbol.getRaiz();
char op='s';
while(op !='n' && op!='N'){
System.out.println(" Ingrese elemento");
Object elem = entrada.readLine();
Nodo x=new Nodo(elem);
// Buscar
buscarEnElArbol(miArbol.getRaiz(), miArbol.getRaiz(), x);
System.out.println(" Continuar enter/ n");
String opcion=entrada.readLine();
opcion=opcion.equals("")?"a":opcion;
op = opcion.charAt(0);
}
}
public void buscarEnElArbol(Nodo ant, Nodo p, Nodo x){
if(p!=null){
if(Integer.parseInt(x.getDato().toString())==Integer.parseInt(p.getDato().toString())){
miArbol.eliminar(ant, p);
}else{
if(Integer.parseInt(x.getDato().toString())>Integer.parseInt(p.getDato().toString())){
buscarEnElArbol(p,p.getPd(),x);
}else{
buscarEnElArbol(p,p.getPi(),x);
}
}
}
}
public void imprimirArbol(){
System.out.println("=====================");
System.out.println("Elementos del arbol");
miArbol.imprimir(miArbol.getRaiz()) ;
System.out.println("");
System.out.println("=====================");}
public void mostrarOpciones(){
System.out.println("=================");
System.out.println(" Opciones de Arbol");
System.out.println("1- Generar");
System.out.println("2- Eliminar");
System.out.println("3- Imprimir");
System.out.println("Ingrese su opciones:"); }
public void menu()throws Exception{
int op = 9;
do{
switch (op) {
case 1: generar(); break;
case 2: eliminarNodo(); break;
case 3: imprimirArbol(); break;}
mostrarOpciones();
String opc = entrada.readLine();
opc = opc.equals("")?"9":opc;
op=Integer.parseInt(opc);
}while(op!=0);
}
public static void main(String[] args)throws Exception {
ArbolAplicacion mi=new ArbolAplicacion();
mi.menu();
}}
CLASE PRINCIPAL
public class Principal {
public static void main(String[] args) throws Exception {
ArbolAplicacion miA=new ArbolAplicacion();
miA.menu();
}}
public static void main(String[] args) throws Exception {
ArbolAplicacion miA=new ArbolAplicacion();
miA.menu();
}}
Q tal amigo. disculpe el metodo eliminarNodoCon2SubArboles(ant, p);
ResponderEliminarpodria ayudarme...
public class Arbol {
Eliminarprivate Nodo Raiz;
public Arbol(){ Raiz=null;}
// insertar(Raiz, Raiz, x)
public boolean arbolVacio(){return Raiz == null;}
public void insertar(Nodo ant, Nodo p, Nodo x){
if (p != null){
if (Integer.parseInt(x.getDato().toString()) > Integer.parseInt(p.getDato().toString())) {
insertar(p, p.getPd(), x);
}else{
insertar(p, p.getPi(), x);
}
}else{
if (arbolVacio()){
Raiz = x;
}else{
if (Integer.parseInt(x.getDato().toString()) > Integer.parseInt(ant.getDato().toString())) {
ant.setPd(x);
}else {
ant.setPi(x);
}
}
}
}
public void imprimir(Nodo p){
if(p != null){
imprimir(p.getPi());
System.out.print(p.getDato()+"; ");
imprimir(p.getPd());
}
}
public Nodo getRaiz() {
return Raiz;
}
public void setRaiz(Nodo raiz) {
Raiz = raiz;
}
public void eliminar(Nodo ant, Nodo p){
if(esNodoHoja(p)){
eliminarNodoHoja(ant, p);
}else{
if (esNodoCon2SubArboles(p)){
eliminarNodoCon1SubArnol(ant, p);
}else{
eliminarNodoCon1SubArnol(ant, p);
}
}
}
public void eliminarNodoHoja(Nodo ant, Nodo p){
if (Raiz != p){
if(ant.getPd() == p){
ant.setPd(null);
}else{
ant.setPi(null);
}
}else{
Raiz = null;
}
}
public void eliminarNodoCon1SubArnol(Nodo ant, Nodo p){
if (Raiz == p){
if(p.getPd() != null){
Raiz = Raiz.getPd();
}else{
Raiz = Raiz.getPi();
}
}else{
if ( ant.getPd() == p){
if(p.getPd() != null){
ant.setPd(p.getPd());
}else{
ant.setPd(p.getPi());
}
}else{
if(p.getPd() != null){
ant.setPi(p.getPd());
}else{
ant.setPi(p.getPi());
}
}
}
}
public boolean esNodoHoja(Nodo p){return (p.getPi() == null && p.getPd() == null);}
public boolean esNodoCon2SubArboles(Nodo p){return (p.getPi() != null && p.getPd() != null);}
}
disculpe alguien me puede desir el codigo de inorder
ResponderEliminar