Computação Múltipla Escolha

Suponha que o método leafSum() é definido por 1 // Devolve a soma das folhas na árvore, 2 // ou 0 se a árvore for vazia 3 4 template<T> 5 public int leafSum(TNODE<T>* tree) 6 { 7 if (tree == NULL) 8 return 0; 9 else 10 { 11 <código> 12 } 13 } Quais dos fragmentos seguintes poderia substituir <código>, corretamente, no referido método?

Suponha que o método leafSum() é definido por
1 // Devolve a soma das folhas na árvore,
2 // ou 0 se a árvore for vazia
3
4 template<T>
5 public int leafSum(TNODE<T>* tree)
6 {
7 if (tree == NULL)
8 return 0;
9 else
10 {
11 <código>
12 }
13 }

Quais dos fragmentos seguintes poderia substituir <código>, corretamente, no referido método?

  1. Apenas I e II
  2. Apenas II
  3. Apenas II e III
  4. Apenas IV
  5. Apenas V

Resolução completa

Explicação passo a passo

E
Alternativa E

Alternativa E - Apenas V

Para determinar a resposta correta, devemos analisar a lógica necessária para calcular a soma das folhas (leafSum) em uma árvore binária.

Análise Lógica do Problema

O objetivo da função é somar apenas os valores dos nós folha. Um nó folha é aquele que não possui filhos, ou seja, tanto o filho esquerdo quanto o direito são nulos.

Os requisitos para o código dentro do bloco else (onde tree não é nulo) são:

  1. Verificar se é folha: Ambos os filhos devem ser NULL.
  2. Retorno para folha: Se for folha, retorna o valor do elemento (tree->element).
  3. Recursão para nós internos: Se não for folha, deve chamar a função recursivamente nos filhos, mas não deve somar o valor do nó atual ao resultado.

Análise dos Fragmentos

Vamos avaliar cada opção apresentada:

  • I. Incorreto: O código verifica se é folha e retorna o elemento, mas não possui um else para tratar os nós internos. Isso causaria erro de compilação (função sem retorno) ou comportamento indefinido para nós que não são folhas.
  • II. Incorreto: Utiliza o operador lógico || (OU). Um nó só é folha se ambos os filhos forem nulos (&&). Além disso, adiciona 1 ao resultado, o que não faz sentido para a soma dos elementos.
  • III. Incorreto: Embora identifique corretamente as folhas com &&, ele soma tree->element mesmo quando o nó tem filhos (else). Isso transformaria a função em uma soma de todos os nós, e não apenas das folhas.
  • IV. Incorreto: Assim como a II, utiliza ||. Isso faria com que qualquer nó com pelo menos um filho ausente fosse considerado folha, gerando erros lógicos.
  • V. Correto:
  • Usa && para identificar corretamente as folhas.
  • Retorna o valor do elemento apenas nas folhas.
  • Na recursão (else), soma apenas os resultados das chamadas leafSum dos filhos, ignorando o valor do nó atual.
  • Como a função base trata NULL retornando 0, chamadas recursivas em filhos inexistentes funcionam perfeitamente.

Conclusão

Somente o fragmento V implementa corretamente a lógica de soma das folhas sem incluir valores de nós internos ou utilizar condições lógicas incorretas. Portanto, a alternativa correta é a E.

Tem outra questão para resolver?

Resolver agora com IA

Mais questões de Computação

Ver mais Computação resolvidas

Tem outra questão de Computação?

Cole o enunciado, tire uma foto ou descreva o problema — a IA resolve com explicação completa em segundos.