Esta biblioteca disponibiliza um conjunto de funções que permitem manipular uma árvore binária de pesquisa equilibrada.
Na criação de uma árvore é necessário especificar a função que compara as chaves.
int keyComp(void* key1,void* key2)
(usada pelas funções treeInsert, treeRemove e treeGet); deve devolver um valor menor do que 0 se key1 for menor do que key2, um valor maior do que 0 se key1 for maior do que key2 e 0 caso contrário; pode ser alterada através da função treeSetKComp.
int keyComp(void* key1,void* key2) { if(key1&&key2) return strcmp((char*)key1,(char*)key2); else return 0; }
Definido no ficheiro treemap.h.
Ir para o código fonte deste ficheiro.
Estruturas de Dados | |
| struct | STreeNode |
| Estrutura do nodo da árvore. Mais... | |
| struct | STreeMap |
| Estrutura de uma árvore. Mais... | |
Definições de Tipos | |
| typedef STreeNode * | TreeNode |
| Definição do apontador para os nodos da árvore. | |
| typedef STreeMap * | TreeMap |
| Definição da árvore. | |
Enumerações | |
| enum | BFactor { L, E, R } |
| Tipo que indica para onde uma árvore está balanceada. | |
Funções | |
| TreeMap | newTree (int(*keyComp)(void *, void *)) |
| Cria uma árvore. | |
| int | treeSetKComp (TreeMap tree, int(*keyComp)(void *, void *)) |
| Altera a função que compara as chaves de uma árvore. | |
| void | treeDelete (TreeMap tree) |
| Elimina uma árvore. | |
| int | treeInsert (TreeMap tree, void *key, void *value, int replace) |
| Insere um par chave/valor numa árvore. | |
| int | treeRemove (TreeMap tree, void *key, void **value, void(*del)(void *)) |
| Remove um elemento de uma árvore. | |
| int | treeGet (TreeMap tree, void *key, void **value) |
| Procura um elemento numa árvore. | |
| int | treeIsAVL (TreeMap tree) |
| Verifica se uma árvore está equilibrada. | |
| int | treeHeight (TreeMap tree) |
| Determina a altura de uma árvore. | |
| int | treeSize (TreeMap tree) |
| Determina o número de elementos de uma árvore. | |
| int | treeInOrder (TreeMap tree, void(*fun)(void *, void *)) |
| Efectua uma travessia In-Order de uma árvore. | |
| int | treePreOrder (TreeMap tree, void(*fun)(void *, void *)) |
| Efectua uma travessia Pre-Order de uma árvore. | |
| int | treePosOrder (TreeMap tree, void(*fun)(void *, void *)) |
| Efectua uma travessia Pos-Order de uma árvore. | |
| Iterator | treeKeys (TreeMap tree) |
| Cria um iterador a partir das chaves de uma árvore. | |
| Iterator | treeValues (TreeMap tree) |
| Cria um iterador a partir dos valores associados às chaves de uma árvore. | |
| TreeMap newTree | ( | int(*)(void *, void *) | keyComp | ) |
Cria uma árvore.
Se não for possível criar a árvore devolve NULL. Tem que ser especificada a função que compara chaves. Esta função pode ser alterada a qualquer momento, utilizando a função treeSetKComp.
(Ver descrição das funções)
| keyComp | função que compara duas chaves. |
| void treeDelete | ( | TreeMap | tree | ) |
| int treeGet | ( | TreeMap | tree, | |
| void * | key, | |||
| void ** | value | |||
| ) |
Procura um elemento numa árvore.
Devolve o valor associado a uma chave, se esta existir. Se a chave não existir é colocado o valor NULL em value.
| tree | árvore. | |
| key | chave que procuramos. | |
| value | endereço onde é colocado o resultado. |
| int treeHeight | ( | TreeMap | tree | ) |
| int treeInOrder | ( | TreeMap | tree, | |
| void(*)(void *, void *) | fun | |||
| ) |
Efectua uma travessia In-Order de uma árvore.
Aplica a função fun a todos os elementos da árvore.
A função fun tem que ser do tipo: void fun(void*,void*).
| tree | árvore. | |
| fun | função a ser aplicada. |
| int treeInsert | ( | TreeMap | tree, | |
| void * | key, | |||
| void * | value, | |||
| int | replace | |||
| ) |
Insere um par chave/valor numa árvore.
Caso a chave já exista, a variável replace determina se o valor antigo é ou não substituído (caso seja não há substituição, caso tenha outro valor o novo elemento é inserido).
| tree | árvore. | |
| key | chave. | |
| value | valor associado à chave. | |
| replace | variável que determina se os elementos já existentes são ou não substituídos. |
| int treeIsAVL | ( | TreeMap | tree | ) |
Verifica se uma árvore está equilibrada.
Considera-se que a árvore está equilibrada se a diferença entre a altura das subárvores esquerda e direita (em todos os nodos) não for superior a 1.
| tree | árvore. |
Cria um iterador a partir das chaves de uma árvore.
Faz uma travessia In-Order da árvore e "coloca" as referências para as chaves num iterador. Se ocorrer algum erro a função devolve NULL.
| tree | árvore. |
| int treePosOrder | ( | TreeMap | tree, | |
| void(*)(void *, void *) | fun | |||
| ) |
Efectua uma travessia Pos-Order de uma árvore.
Aplica a função fun a todos os elementos da árvore.
A função fun tem que ser do tipo: void fun(void*,void*).
| tree | árvore. | |
| fun | função a ser aplicada. |
| int treePreOrder | ( | TreeMap | tree, | |
| void(*)(void *, void *) | fun | |||
| ) |
Efectua uma travessia Pre-Order de uma árvore.
Aplica a função fun a todos os elementos da árvore.
A função fun tem que ser do tipo: void fun(void*,void*).
| tree | árvore. | |
| fun | função a ser aplicada. |
| int treeRemove | ( | TreeMap | tree, | |
| void * | key, | |||
| void ** | value, | |||
| void(*)(void *) | del | |||
| ) |
Remove um elemento de uma árvore.
Permite devolver o valor removido, caso o valor de value seja diferente de NULL. Se a chave não existir ou o elemento não for removido é colocado o valor NULL em value.
| tree | árvore. | |
| key | chave que queremos remover. | |
| value | endereço onde é colocado o elemento removido (ou NULL). | |
| del | função que elimina uma chave (ou NULL). |
| int treeSetKComp | ( | TreeMap | tree, | |
| int(*)(void *, void *) | keyComp | |||
| ) |
| int treeSize | ( | TreeMap | tree | ) |
Cria um iterador a partir dos valores associados às chaves de uma árvore.
Faz uma travessia In-Order da árvore e "coloca" as referências para os "valores" num iterador. Se ocorrer algum erro a função devolve NULL.
| tree | árvore. |