Ir ao conteúdo
  • Cadastre-se

Java Método remover arvore Java


HeroGame

Posts recomendados

Pessoal, eu fiz um algoritmo de arvore e estou tentando fazer um método recursivo de remover um nó passado como parâmetro, em que o no removido seja substituído pelo menor nó da hierarquia da direita ou o maior nó da hierarquia da esquerda. Vocês podem me dar alguma dica de como prosseguir?

 

package no;


public class No {
    int valor;
    No noEsquerda,noDireita;
    
    
    
    public No(int valor){
        this.valor = valor;
    }
    
    public static No raiz;
   
    
    public static void insertar(int valor){
         insertarNo(raiz, valor);
         
    }
    
    
    
    public static void insertarNo(No node, int valor){
        if (node == null){
            raiz = new No(valor);
            System.out.println("a raiz principal é " + raiz.valor);
            
        }
        else {
            if(valor < node.valor){
                if(node.noEsquerda!=null){ //COLOCANDO NA ESQUERDA DA RAIZ ATUAL
                    insertarNo(node.noEsquerda,valor);
                } else {
                    System.out.println("Inserindo " + valor + " a esquerda de " + node.valor);
                    node.noEsquerda = new No(valor);
                }
                
            }
            else {//COLOCANDO NA DIREITA DA RAIZ ATUAL
                if(node.noDireita != null){
                    insertarNo(node.noDireita,valor);
                    
                } else {
                    System.out.println("Inserindo " + valor + " a direita de " + node.valor);
                        
                    node.noDireita = new No(valor);
                    
                }
            
        }
        
    }
        
    }
    public static void remover(int valor) {//novo insertar com recursividade
        raiz = removerRecursivo(raiz, valor);
    }

    public static  No removerRecursivo(No node, int valor){

        if (node == null) {
            return null;
        }else{
            

            if (valor == node.valor) {//encontra o valor 
               if (node.noEsquerda!=null && node.noDireita != null){
                   removerRecursivo(node.noEsquerda, valor);
                    
               } else {
                }
                node = null;
                
                
            } else if(valor < node.valor) {//esq
                node.noEsquerda = removerRecursivo(node.noEsquerda, valor);
                
            } else{ //direita
                node.noDireita = removerRecursivo(node.noDireita, valor);
                
            }
        }

        return node;
    }

    
    
    public static void main(String[] args) {
        insertar(10);
        insertar(11);
        insertar(3);
        insertar(6);
        insertar(10);
        insertar(15);
        insertar (2);
        insertar(23);
        insertar(1);
        insertar (1499);
        insertar (13);
        insertar(11);
        insertar (9);
        insertar (3);
        insertar(5);
        insertar (9);
        insertar (11);
        insertar(21);
        remover(6);
        
        
    }

}

 

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...