Me ajudem a refatorar esse código por favor!

1 resposta
java
Ana_Paula_Pereira1
public void procura(T valor, No raiz) {

int nivel = 0;

while (raiz != null && raiz.data != valor) {

if (valor.compareTo(data) == 1) {

raiz = raiz.direito;

} else {

raiz = raiz.esquerdo;

}

nivel++;

}

if (raiz == null) {

System.out.println("\nNó " + valor + " não encontrado!");

} else {

System.out.println("\nO nó " + valor + " está no nível " + nivel);

}

}

1 Resposta

felipe.machado

Oi @Ana_Paula_Pereira1,
o que você quer dizer com refatorar?
Esse é um algoritmo de busca em árvore ,aparentemente, e o jeito mais comum de se fazer isso é utilizando um algoritmo recursivo. Segue exemplo simples feito em Java:

public static void main(String[] args) {

    No root = new No("root", 1);

    No child1 = new No("child1", 2);
    No child1_1 = new No("child1_1", 3);
    No child1_2 = new No("child1_2", 4);

    child1.addChild(child1_1);
    child1.addChild(child1_2);

    No child2 = new No("child2", 5);
    No child2_1 = new No("child2_1", 6);
    No child2_2 = new No("child2_2", 7);

    child2.addChild(child2_1);
    child2.addChild(child2_2);

    root.addChild(child1);
    root.addChild(child2);

    No no = root.search(7);
    if (no == null) {
        System.out.println("Not found");
    } else {
        System.out.println("Node found: " + no.getName());
    }

}

public static class No<T> {

    private String name;
    private T value;
    private final List<No> children;

    public No(String name, T value) {
        this.name = name;
        this.value = value;
        children = new ArrayList<>();

    }

    public void addChild(No child) {
        children.add(child);
    }

    public T getValue() {
        return value;
    }

    public boolean isLeaf() {
        return children.isEmpty();
    }

    public No search(T value) {
        if (value == null) {
            return null;
        }

        //If equals stop looking for
        if (Objects.equals(value, getValue())) {
            return this;
        }

        No nodeFound;

        //Try to find in children
        for (No no : children) {

            if ((nodeFound = no.search(value)) != null) {
                return nodeFound;
            }
        }

        return null;
    }

    @Override
    public String toString() {
        return name;
    }

    public String getName() {
        return name;
    }

}

Espero que ajude.

Criado 21 de outubro de 2017
Ultima resposta 21 de out. de 2017
Respostas 1
Participantes 2