Como encontrar um nó em uma Java Árvore

user395817:

Eu sou um iniciante em Java e estou atualmente tentando resolver um exercício no capítulo Trees.

Uma árvore é formada por esses nós. digite descrição da imagem aqui . Um nó contém um valor que corresponde a um número inteiro. Além do nó na raiz da árvore, um nó sempre tem apenas um outro nó que as referências de TI. Se um nó não tem filho para a direita ou para a esquerda, então a referência correspondente é null. o valor realizado por qualquer criança na subárvore à esquerda é menor que o valor de seu pai e o valor mantido por qualquer criança na subárvore da direita é maior que o valor de seu pai. a altura da árvore é entre 0 e 100 000 knots.

Eu estou tentando implementar um find(int v)método que retorna o nó segurando o valor vse o nó não existe, então, encontrar terá que voltar null.

Isto é o que eu tenho feito até sei, mas eu sou um pouco perdido:

class Node{
    Node left, right;
    int value;

    public Node find (int v){
        Node result = null;
        if (this.left != null) result = find(v);
        if (this.value == v) return this;
        if (result == null && this.right != null) 
            result = find(v);

        return result;     

    }

    public static void main (String[] args){
        Node n = smallNode.find(8);
        System.out.println(n);
        n = LargestNode.find(0);
        System.out.println(n);
    }
}

Estou recebendo um StackoverOverflowErrornesta linha:

if (this.left != null) result = find(v);

O que estou fazendo de errado ? Não consigo encontrar porque ele está a aumentar essa exceção.

RAZ_nuh_ts:

Você deve verificar o valor primeiro, o retorno thisse o nó tem o valor que você está procurando. Se ele não verifica você pode continuar a partir do nó atual e ir para a direita, depois de ter retornado verificar o resultado com o valor dado, se o retorno correto que Node, caso contrário retorna qualquer que seja o lado esquerdo dá. Ele quer será o nó com o valor que você quer ou nulo.

public Node find (int v){
    Node result = null;

    //check for value first
    if (this.value == v) return this;

    //check if you can go any further from the current node
    if(this.left == null && this.right == null) return null;

    //now go right
    result = this.right.find(v);

    //check the node
    if(result != null && result.value == v) return result;

    //if not found return whatever is returned by searching left
    return this.left.find(v);
}

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=210092&siteId=1
Recomendado
Clasificación