Você está na página 1de 29

rvores Binrias

Alberto Sales

IFMT - CUIAB

rvores Binrias

Esquemas em rvores so utilizados para representar estruturas


hierrquicas (rvores genealgicas, campeonatos de futebol ou
organizaes).
Na computao, as rvores podem ser utilizadas para representar
decises, definies formais de linguagem ou mesmo para
representar hierarquia entre elementos
Na programao:
No contexto da programao e cincia da computao,
uma estrutura de dados que herda as caractersticas das
topologias em rvore onde os dados esto dispostos de
forma hierrquica
um conjunto de dados hierarquicamente subordinado a
outro

rvores Binrias: analogia

Uma rvore composta por um elemento principal chamado raiz, que


possui ligaes para outros elementos, que so denominados galhos ou
filhos.
Estes galhos levam a outros elementos que tambm possuem outros
galhos. O elemento que no possui galhos conhecido como folha ou
n terminal.

rvores Binrias: conceito

Uma rvore binria um conjunto finito de elementos que est


vazio ou particionado em trs subconjuntos:
raiz da rvore - elemento inicial (nico);
subrvore da esquerda - se vista isoladamente compe uma
outra rvore;
subrvore da direita - se vista isoladamente compe uma
outra rvore.
A rvore pode no ter nenhum elemento (rvore vazia). A
definio recursiva e, devido a isso, muitas operaes sobre
rvores binrias utilizam recurso.
As rvores onde cada n que no seja folha numa rvore binria
tem subrvores esquerda e direita no vazias so conhecidas
como rvores estritamente binrias. Uma rvore estritamente
binria com n folhas tem 2n - 1 ns.
4

rvores Binrias: conceito

A figura abaixo apresenta um mtodo convencional de


representao de uma rvore.
Nesta rvore, o elemento A a raiz da rvore, a subrvore da
esquerda o elemento B e a da direita representada pelo
elemento C.
Um n sem filhos chamado de folha. Sendo A a raiz de uma
rvore binria e B sua subrvore, dito que A pai de B e que B
filho de A.

rvores Binrias: relaes

Outras relaes (e conceitos) podem ser observados na figura


apresentada abaixo:
B e C so filhos de A.
B e C so irmos.
TA a subrvore enraizada em A, portanto toda a rvore.
TF a subrvore enraizada em F, que contm os ns F, H e I.
Ns sem filhos so chamados de folhas, portanto os ns D, G, H
e I so folhas.

rvores Binrias: Caminho

Um caminho da rvore composto por uma seqncia de ns


consecutivos (n1,n2 ,n3 ,,nkk-1,nk) tal que existe sempre a
relao: nj pai de n1j+1.
Os k ns formam um caminho de comprimento k - 1.
O comprimento entre o n A e o n H 3.

rvores Binrias: Nvel de n

O nvel de um n pode ser definido como o n raiz de nvel 0.


Os outros ns tm um nvel que uma unidade a mais do que o
nvel do seu pai.
Na rvore da Figura tem-se:
Nvel 0: A
Nvel 1: B e C
Nvel : D, E e F
Nvel : G, H e I

rvores Binrias: Nvel de n

Altura de um n o comprimento do maior caminho do n at


alguns de seus descendentes.
Descendentes do n so todos os ns que podem ser
alcanados caminhando-se para baixo a partir do n.
A altura de cada uma das folhas 1.
Desta maneira a altura de A 4, a altura de C 3 enquanto que
de E e F 2.

rvores Binrias: rvore Binria


Completa

Na Figura a pode ser vista uma rvore completa de nvel 3 .


Uma rvore completa uma rvore estritamente binria na qual
todas as folhas esto no mesmo nvel k.
Sendo k a profundidade da rvore, o nmero total de ns 2k+1-1
e o nmero total de folhas k.
Embora uma rvore binria completa possua muitos ns (o
mximo para cada profundidade), a distncia da raiz a uma folha
qualquer relativamente pequena.
A rvore da Figura tem profundidade 3 com 15 ns (24 - 1) e 8
folhas (23).

10

rvores Binrias: rvore Binria


Completa

O nmero total de ns numa rvore binria completa de


profundidade d, tn, igual soma do nmero de ns em cada
nvel entre 0 e d. Sendo assim:

11

rvores de Busca Binria

Uma rvore de busca binria (Binary search tree) uma rvore


binria onde a informao que o n esquerdo possui menor ou
igual informao da chave.
De forma anloga, a informao que o n direito possui maior
ou igual informao da chave.
O objetivo de organizar dados em rvores de busca binria
facilitar a tarefa de procura de um determinado valor.
A partir da raiz e de posse da informao a ser encontrada,
possvel saber qual o caminho (galho) a ser percorrido at
encontrar o n desejado.
Para tanto, basta verificar se o valor procurado maior, menor
ou igual ao n que se est posicionando

12

rvores de Busca Binria

Deve-se observar que no existe uma nica forma de organizar


um conjunto de informaes em uma rvore de busca binria,
ainal, dependendo da escolha do n raiz, obtm-se rvores
diferentes.
Na figura os valores ({ 2, 3, 5, 5, 7, 8}) so organizados em
rvores de busca de duas maneiras diferentes.

13

rvores de Busca Binria

As duas rvores contm exatamente os mesmos valores, porm


possuem estruturas diferentes.
Enquanto a rvore A est enraizada em um dos ns de valor 5, a
rvore B est enraizada no n de valor 2.
Supondo que se est buscando o valor 8 nas rvores, as
comparaes seriam como se segue na tabela.

14

rvores de Busca Binria

Na rvore A, so realizadas menos comparaes em relao


utilizada na rvore B.
O melhor caso ir ocorrer quando a rvore estiver cheia, neste
caso a procura de um item ter tempo proporcional a log n,
enquanto o pior caso ocorrer quando todos os ns da rvores
apontarem somente para um dos lados, caso em que o tempo de
processamento da procura ser proporcional a n.

15

Operaes em rvores Binrias:


Insero

A insero comea com uma busca procurando pelo valor na


rvore.
Se o elemento no existir na vore, alcanada a folha, e ento
inserido o valor nesta posio.
Ou seja, examinada a raiz e introduzido um novo n na
subrvore da esquerda, se o valor novo menor do que a raiz, ou
na subrvore da direita, se o valor novo for maior do que a raiz.
Os algoritmos (verso iterativa) e (verso recursiva),
respectivamente, demonstram o processo de incluso de um
elemento na rvore.
rvore

16

17

18

Operaes em rvores Binrias:


Insero

Os algoritmos deixam claro o processo de insero, o novo valor


primeiro comparado com o valor da raiz:
Se seu valor for menor que a raiz, comparado ento com o
valor do filho da esquerda da raiz.
Se seu valor for maior, ento compara-se com o filho da
direita da raiz.
Este processo continua at que se chegue a um n folha, e ento
adiciona-se o filho direita ou esquerda, dependendo de seu
valor ser maior ou menor que o valor da folha.

19

rvores Binrias: Pesquisa

Para a busca em uma rvore binria por um valor especfico


deve-se examinar a raiz:
Se o valor for igual raiz, o valor existe na rvore.
Se o valor for menor do que a raiz, ento deve-se buscar na
subrvore da esquerda, e assim recursivamente em todos os
ns da subrvore.
Similarmente:
se o valor for maior que a raiz, ento deve-se buscar na
subrvore da direita.
At alcanar o n-folha da rvore, encontrando-se ou no o
valor requerido

20

rvores Binrias: Pesquisa

21

rvores Binrias: Pesquisa

22

rvores Binrias: Exemplo


#define FILHOS 4
typedef struct NO {
Representao com vetor de
filhos
int info;
struct NO *pai;
struct NO *filhos[FILHOS];
} NO;
Representao Dinmica

typedef struct NO {
int info;
struct NO *pai;
struct NO *filho; /* 10 filho */
struct NO *irmao; /* prximo irmo*/
} NO;

23

rvores Binrias: Exemplo

Na figura fica clara a representao de rvores, com vetores, ter


limitaes para a quantidade de filhos.

24

rvores Binrias: Exemplo

No programa, com ponteiros, o campo filho for um ponteiro


para subrvore esquerda e o campo irmao como o ponteiro para
a raiz da subrvore direita, tem-se uma rvore binria como a
representada na figura abaixo.

25

rvores Binrias: Exemplo

Com o programa a seguir, tem-se a representao de uma rvore


binria conforme a Figura vista anteriormente.

typedef struct NO {
int info;
struct NO *esquerda;
struct NO *direita;
struct NO *pai;
} NO;

26

rvores Binrias: Exemplo

27

rvores Binrias: Exemplo

28

rvores Binrias: Representao

Como acontece com os ns de listas, os ns de rvores podem


ser implementados como elementos de vetores ou como
alocaes de uma varivel dinmica. Cada n contm os campos
info, left, right e father.
Os campos left, right e father de um n apontam para o filho
esquerdo, para o filho direito e para o pai do n,
respectivamente.
Usando a implementao de vetor, podemos declarar:
#define NUMNODES 500
struct nodetype {
int info;
int left;
int right;
int father;
};
struct nodetype node[numnodes];

29

Você também pode gostar