Árvores binárias de busca

Java

11) Com base na lógica de Árvores Binárias de Busca, considere que se tem uma classe BST
com o método getRoot(), que retorna um objeto da classe BSTNode, que, por sua vez,
possui os seguintes métodos disponíveis: isNIL() — retornando um booleano —,
getData() — retornando um inteiro — e getLeft() e getRight() — que retornam um
objeto da classe BSTNode. Escreva um método em Java que, dada uma árvore do tipo BST,
calcule a diferença entre o maior e o menor número inteiro armazenados na árvore.
Comente o comportamento assintótico do seu método.


int maiorDiferenca(BST arvore) {
//...
}

Foto de Eduardo L.
Eduardo perguntou há 1 ano

Sabe a resposta?

Ganhe 10 pts por resposta de qualidade
Responder dúvida
1 resposta
0
votos
Nenhum usuário votou nessa resposta como útil.
Professora Ilze O.
Identidade verificada
  • CPF verificado
  • E-mail verificado
Respondeu há 1 ano

Para calcular a diferença entre o maior e o menor número inteiro armazenados em uma árvore BST, podemos percorrer a árvore de forma recursiva, mantendo uma variável que armazena o valor máximo encontrado até o momento e outra variável que armazena o valor mínimo encontrado até o momento. A cada nó visitado, comparamos o valor do nó com as variáveis de máximo e mínimo e atualizamos as variáveis se necessário.

Segue abaixo a implementação do método em Java:

 

public int diferencaMinMax(BSTNode root) {
    if (root.isNIL()) {
        return 0;
    }
    int min = root.getData();
    int max = root.getData();
    if (!root.getLeft().isNIL()) {
        int diffLeft = diferencaMinMax(root.getLeft());
        if (diffLeft < min) {
            min = diffLeft;
        }
        if (diffLeft > max) {
            max = diffLeft;
        }
    }
    if (!root.getRight().isNIL()) {
        int diffRight = diferencaMinMax(root.getRight());
        if (diffRight < min) {
            min = diffRight;
        }
        if (diffRight > max) {
            max = diffRight;
        }
    }
    return max - min;
}

 

O comportamento assintótico do método depende da estrutura da árvore BST. Em uma árvore balanceada, a complexidade é O(log n), já que a cada nível da árvore a quantidade de nós a serem visitados é reduzida pela metade. Em uma árvore não balanceada, a complexidade pode chegar a O(n), caso a árvore esteja totalmente desbalanceada em uma das direções.

Envie uma dúvida gratuitamente

Envie sua primeira dúvida gratuitamente aqui no Tira-dúvidas Profes. Nossos professores particulares estão aqui para te ajudar.

Professores particulares de Java

+ Ver todos
Encontre professor particular para te ajudar nos estudos
R$ 45 / h
Ilze O.
Santo Antônio do Leverger / MT
Ilze O.
1,0 (1 avaliação)
Tarefas resolvidas 3 tarefas resolvidas
Identidade verificada
  • CPF verificado
  • E-mail verificado
1ª hora grátis
Graduação: MATEMATICA (UFMT )
Resumo: sou estudante de matemática no 5º semestre da graduação e tenho experiência como monitora voluntária de matrizes e funções. Além disso, faço p
R$ 60 / h
César D.
Mogi Guaçu / SP
César D.
4,9 (812 avaliações)
Horas de aulas particulares ministradas 87 horas de aula
Tarefas resolvidas 995 tarefas resolvidas
Identidade verificada
  • CPF verificado
  • E-mail verificado
1ª hora grátis
Programação Orientada a Objetos em Java Java - Geral
Graduação: Matemática Aplicada e Computacional (Universidade Estadual de Campinas (UNICAMP))
Faça aulas de matemática, computação e programação em c, c++, java e python.
R$ 75 / h
Marcos R.
Maceió / AL
Marcos R.
5,0 (1 avaliação)
Horas de aulas particulares ministradas 4 horas de aula
Identidade verificada
  • CPF verificado
  • E-mail verificado
1ª hora grátis
Programação Orientada a Objetos em Java Java ORM Framework Aplicações RESTfull com Java
MBA: Engenharia de Dados (IGTI)
Engenheiro de software com mais de 20 anos de experiência no ensino e desenvolvimento de software. Venha aprender de verdade!