Apesar das vantagens demonstradas, a árvore T pode ter problemas de desempenho em hardware moderno por não aproveitar adequadamente o espaço da memória cache do processador[2].
A árvore T é uma árvore binária balanceada que busca obter benefícios de desempenho de estruturas tais como árvores AVL e árvores B.
Balanceamento
O balanceamento é feito usando rotações semelhantes aos da árvore AVL, no entanto ele é feito com muito menos frequência do que em uma árvore AVL. Devido a possibilidade de movimentação de dados dentro do nó.
Busca
Ela possui um melhor desempenho em busca do que a árvore B já que não precisa visitar tantas chaves como na árvore B, no entanto seu desempenho é um pouco pior que a arvore AVL que visita apenas uma chave por nó e corta caminhos pela busca binária.
Inserção e Remoção
Possui a inserção e remoção ligeiramente mais rápida do que a árvore B pois sua busca é bem mais rápida que a desta árvore, embora o seu balanceamento seja mais complexo e custoso. A árvore AVL tem o pior desempenho de inserção e remoção pois a cada operação tem que atualizar os índices de balanceamento e se necessário realizar rotações.
Construção
A estrutura de um nó de uma Árvore T pode ser representado pelo desenho abaixo onde:
Ponteiros:
Chaves: são os dados (valores) armazenados no nó. O número máximo de chaves que pode conter num nó é definido por um valor MAX. A chave mais a ESQUERDA do nó possui o menor valor nele armazenado, os valores vão crescendo a medida que vamos para DIREITA. Dispostos como numa lista ordenada.
Ponteiro Pai(T): é um ponteiro que aponta para nó pai logo acima. Se o nó for raiz, aponta para NULL.
Esquerda(T): é um ponteiro que aponta para a subárvore à esquerda do nó. Se não houver subárvore ele aponta para NULL.
Direita(T): é um ponteiro que aponta para a subárvore à direita do nó. Se não houver subárvore ele aponta para NULL.
Post(T) é o ponteiro que aponta para a próxima chave que armazena um valor maior que o da chave anterior.
Ant(T) é o ponteiro que aponta para a chave antecessora que armazena um valor menor que o da chave atual.
Controle:
dado N_CHAVE, campo que armazena o número de chaves contidos em um nó, que deve sempre ser menor que MAX.
dado INDICE, campo que armazena o índice de balanceamento da árvore assim como nas árvores AVL, estando balanceadas possuem valor 1, 0 ou -1 qualquer valor diferente indica que a árvore precisa ser balanceada.
Implementação em C
typedefarvore_Tarvore_T,*arvore;typedefintdado;typedefstructcelulacelula,*no;structcelula{dadoconteudo;noposterior;};structarvore_T{nochave;dadonumerochaves;dadoindice;arvorepai;arvoreesquerda;arvoredireita;};#define MAX() //MAX sendo o limite de chaves que pode conter em um nó da Árvore T#define NC(T) ((T)-> numerochaves)#define CHAVE(T) ((T)->conteudo)#define POST(T) ((T)->posterior)#define ESQUERDA(T) ((T)->esquerda)#define DIREITA(T) ((T)->direita)#define PAI(T) ((T)->pai)