Você está na página 1de 3

Vinculado listas geralmente oferecem maior flexibilidade de matrizes, mas elas são

lineares estruturas e é difícil usá-los para organizar uma representação hierárquica de


objetos. Apesar de pilhas e filas refletir alguma hierarquia, eles são limitados a uma
única dimensão. Para superar essa limitação, criamos um novo tipo de dados chamado
de uma árvore que consiste em nós e arcos. Ao contrário das árvores naturais, estas
árvores são retratadas de cabeça para baixo com a raiz no topo e as folhas no fundo. A
raiz é um nó que não tem pai, mas pode ter nós filho único. Folhas, por outro lado, não
têm filhos, ou melhor, seus filhos são estruturas vazias. Uma árvore pode ser definida
recursivamente como:
Uma estrutura vazia é uma árvore vazia.
Se t1 ,..., tk são árvores disjuntas, então, a estrutura, cuja raiz tem como seus filhos as
raízes de t1, ...., tk é também uma árvore.
Apenas estruturas gerados pelas regras 1 e 2 são árvores.
Figura 6.1 contém exemplos de árvores. Cada nó tem de ser acessível a partir da raiz
através de uma única seqüência de arcos, chamado de caminho. O número de arcos
em um caminho é chamado o comprimento do caminho. O nível de um nó é o
comprimento do caminho desde a raiz até o nó mais 1, que é o número de nós no
caminho. A altura de uma árvore não-vazia é o nível máximo de um nó na árvore. A
árvore vazia é uma árvore legítima de altura 0 (por definição), e um único nó é uma
árvore de altura 1. Este é o único caso em que um nó é raiz e uma folha. O nível de um
nó deve ser entre 1 (o nível da raiz) e a altura da árvore, que no caso extremo é o nível
da folha somente em um degenerado árvore se assemelha a uma lista ligada.

Figura 6.2 contém um exemplo de uma árvore que reflete a hierarquia de uma
universidade. Outros exemplos são as árvores genealógicas, árvores refletindo a
estrutura gramatical das sentenças, e as árvores com a estrutura taxonômica de
microrganismos, plantas ou caracteres. Praticamente todas as áreas da ciência fazer
uso de árvores para representar estruturas hierárquicas.

A definição de uma árvore não impõe qualquer condição para o número de filhos de
um determinado nó. Este número pode variar de 0 a qualquer número inteiro. Em
árvores hierárquicas, esta é uma propriedade bem-vindos. Por exemplo, a
universidade tem apenas dois ramos, mas cada campus pode ter um número diferente
de departamentos. Essas árvores são utilizadas em sistemas de gerenciamento de
banco de dados, especialmente no modelo hierárquico. Mas representam hierarquias
não é a única razão para a utilização de árvores. De fato, na discussão a seguir, o
aspecto das árvores é tratada antes de ânimo leve, principalmente na discussão das
árvores de expressão. Este capítulo incide sobre as operações de árvore que nos
permitem acelerar o processo de pesquisa.

Considere uma lista encadeada de n elementos. Para localizar um elemento, a


pesquisa tem que começar desde o início da lista, ea lista deve ser digitalizados até o
elemento é encontrado ou o fim da lista é atingido. Mesmo se a lista é ordenada, a
busca da lista sempre tem que começar a partir do primeiro nó. Assim, se a lista possui
10.000 nós e as informações do último nó a ser acessado, em seguida, todos os 9.999
de seus antecessores têm de ser percorridos, um inconveniente óbvio. Se todos os
elementos são armazenados em uma árvore ordenada, uma árvore onde todos os
elementos são armazenados de acordo com algum critério pré-determinado de
ordenação, o número de testes pode ser substancialmente reduzida, mesmo quando o
elemento a ser colocado é o mais distante. Por exemplo, a lista ligada na figura 6.3a
pode ser transformado em árvore na Figura 6.3b.

Foi um critério razoável de ordenação aplicada para a construção desta árvore? Para
testar se o 31 está na lista vinculada, oito testes devem ser realizados. Este número
pode ser ainda mais reduzido se os mesmos elementos estão ordenados de cima para
baixo e da esquerda para a direita na árvore? O que seria um algoritmo ser como que
nos obriga a fazer três testes apenas: uma para a raiz, 2, um para o seu filho do meio,
12, e outra para o filho único de esta criança de 31? O número 31 pode ser localizado
no mesmo nível em 12, ou poderia ser uma criança de 10 anos. Com esta encomenda
da árvore, nada de realmente interessante é realizado no contexto da pesquisa. (A
pilha discutido mais tarde neste capítulo usa essa abordagem.) Por conseguinte, um
melhor critério deve ser escolhido.

Novamente, observe que cada nó pode ter qualquer número de filhos. Na verdade,
existem algoritmos desenvolvidos para as árvores com um número deliberada de
crianças (ver o próximo capítulo), mas este capítulo discute somente árvores binárias.
Uma árvore binária é uma árvore cujos nós têm dois filhos (possivelmente vazio), e
cada filho é designado como deixou Criança direito OA. Por exemplo, as árvores na
figura 6.4 são árvores binárias, enquanto a árvore da universidade na Figura 6.2 não é.
Uma característica importante das árvores binárias, que é usado posteriormente para
avaliar uma eficiência esperada de algoritmos de ordenação, é o número de folhas.

Como já definido, o nível de um nó é o número de arcos percorridos desde a raiz até o


nó mais um. Segundo esta definição, a raiz está no nível 1, os filhos de seus nonempty
estão no nível 2, e assim por diante. Se todos os nós em todos os níveis, exceto a
última teve dois filhos, então não haveria um nó = 2 ° ao nível 1,2 = 2 'nós no nível de
2,4 = 22 nós no nível 3 e, em geral, 2' nós no nível i + 1. Uma árvore de satisfazer essa
condição é referida como uma árvore binária completa. Nesta árvore, todos os nós
não-terminal tem dois filhos, e todas as folhas estão no mesmo nível. Por conseguinte,
em todas as árvores binárias, há no máximo dois "nós no nível i + 1. No capítulo 9,
calculamos o número de folhas em uma árvore de decisão, que é uma árvore binária
em que todos os nós têm zero ou dois filhos não vazio. Porque as folhas podem ser
intercalados ao longo de uma árvore de decisão e aparecem em cada nível com
exceção do nível 1, não há uma fórmula de aplicação geral pode ser dada para o
cálculo do número de nós, pois pode variar de uma árvore para outra. Mas a fórmula
pode ser aproximada por referir que a primeira

Para todas as árvores não vazias, cujo binário não terminal nós temos exatamente
duas crianças não vazio, o número de folhas m é maior que o número de k nós não
terminal e k = m + 1.

Se uma árvore tem apenas uma raiz, essa observação é trivial. Se isso vale para uma
determinada árvore, depois de duas folhas de uma das folhas já existentes, esta folha
se transforma em um nó não-terminal, em que m é decrementado de 1 e k é
incrementado por 1. No entanto, porque duas novas folhas foram enxertados na
árvore, m é incrementado por 2. Após estes dois incrementos e um decréscimo, a
equação (m-1) + 2 = (k + 1) + 1 é obtido e k-m + 1, que é exatamente o resultado que
visa (ver Figura 6.5). Isso implica que uma árvore de decisão i + 1-nível completo tem 2
"deixa, e por conta da observação anterior, ele também tem 2 '- 1 nós não terminal,
que faz 21 + 2l - 1 = l 2l + - 1 nodos total (ver figura 6.35).

Neste capítulo, as árvores de busca binária, também chamado ordenou árvores


binárias, são de interesse particular. Uma árvore de busca binária tem a seguinte
propriedade: para cada nó n da árvore, todos os valores armazenados em sua
subárvore esquerda (a árvore cuja raiz é o filho esquerdo) são menores que v valor
armazenado em n, e os valores armazenados em ail o direito subárvore são maiores do
que v.

Adicionando uma folha de árvore (a), preservando a relação do número de folhas com
o número de

nós não terminal (b).

k k nós não terminal + I nós não terminal

Por razões que serão discutidas mais tarde, armazenamento de cópias múltiplas do
mesmo valor na mesma árvore é evitado. Uma tentativa de fazê-lo pode ser tratada
como um erro. Os significados de "menos" ou "maior que " dependem do tipo de
dados armazenados na árvore. Nós usamos os operadores "<" e ">", que pode ser
sobrecarregado, dependendo do conteúdo. Por ordem alfabética também é usado no
caso de strings. As árvores da Figura 6.6 são árvores de busca binária. Note que a
Figura 6.6c contém uma árvore com os mesmos dados como a lista ligada na figura
6.3a, cuja busca era para ser otimizado.

Você também pode gostar