Estudo de Árvores Binárias e Algoritmos de Busca
Classificado em Design e Engenharia
Escrito em em
português com um tamanho de 4,11 KB
1) O que é uma Árvore?
É uma estrutura composta por um conjunto de nós.
2) O que é Árvore Binária?
É uma árvore na qual cada nó tem zero, um ou dois filhos (não mais que dois) e só pode ter um único pai.
3) Qual a propriedade fundamental de todas as árvores?
É que só existe um caminho da raiz para qualquer nó.
4) O que é altura?
É o comprimento do caminho mais longo da raiz até uma das folhas.
5) O que é Árvore Binária de Pesquisa?
É um tipo de árvore onde os registros com chaves menores que a raiz estão na subárvore da esquerda e os registros com chaves maiores que a raiz estão na subárvore direita.
6) Faça a Implementação da Função do Antecessor do Nó
int antecessor(ArvBin *subArvEsq) {
if (arvoreVazia(direita(subArvEsq))) {
return raiz(subArvEsq);
} else {
return antecessor(direita(subArvEsq));
}
}7) Faça a Implementação da Função de Pesquisa de um elemento na árvore
ArvBin* pesquisar(ArvBin* arvore, int elem) {
if (arvoreVazia(arvore)) {
return NULL;
}
if (elem < raiz(arvore)) {
return pesquisar(arvore->esquerda, elem);
} else if (elem > raiz(arvore)) {
return pesquisar(arvore->direita, elem);
} else {
return arvore;
}
}8) Faça a Implementação da Função para percorrer a árvore através da Ordem, Pós-Ordem e Pré-Ordem
ORDEM:
void imprimirEmOrdem(ArvBin* arvore) {
if (arvore != NULL) {
imprimirEmOrdem(arvore->esquerda);
printf("%d", raiz(arvore));
imprimirEmOrdem(arvore->direita);
}
}9) Escreva uma Função que calcule o número de nós de uma Árvore
int quantNos(ArvBin* arvore) {
if (arvore == NULL) {
return 0;
} else {
return quantNos(direita(arvore)) + quantNos(esquerda(arvore)) + 1;
}
}10) Escreva uma Função que encontre o menor valor da árvore
int menor(ArvBin* arvore) {
if (esquerda(arvore) != NULL && raiz(esquerda(arvore)) < raiz(arvore)) {
return menor(esquerda(arvore));
} else {
return raiz(arvore);
}
}11) Quais são os dois tipos de busca quando a árvore não é binária de pesquisa e não é ordenada?
- Busca em Largura: A busca em largura inicia pela raiz e explora primeiro todos os nós vizinhos do mesmo nível até atingir a última folha.
- Busca em Profundidade: A busca em profundidade também inicia pela raiz e explora a árvore até chegar a uma folha. Se o elemento não for encontrado, faz um backtrack e segue em direção a outra folha não visitada.
12) Desenvolva o algoritmo da Busca em Largura
- Insere na fila o nó raiz;
- Remover o elemento da fila e analisar;
- Se achar o elemento;
- Finaliza a busca;
- Se não, insere na fila todos os filhos do nó;
- Se a fila estiver vazia;
- Finaliza o algoritmo;
- Se não, volta para o passo 2.
13) Desenvolva o algoritmo da Busca em Profundidade
- Insere na pilha o nó raiz;
- Remove o nó e analisa;
- Se encontrar o elemento;
- Finaliza a busca;
- Se não, insere todos os filhos do elemento na pilha;
- Se a pilha estiver vazia;
- Finaliza o algoritmo;
- Se não, volta para o passo 2.
14) O que é Árvore AVL?
Árvore AVL é uma árvore binária de pesquisa autobalanceada, onde a diferença de altura entre as subárvores é de, no máximo, 1 unidade. Cada inserção e remoção pode requerer um rebalanceamento da árvore, exigindo uma ou mais rotações.
15) Quando uma árvore é dita balanceada?
Quando a diferença entre as alturas das subárvores não é maior do que 1.
16) E quais são as características das operações de rotações?
Uma das características das operações de rotação é preservar a ordem das chaves.