bool Busca_Sequencial(int * S, int tam, int k)
{ int i = 0; bool achou = false; while( i < tam && !achou)
|
bool Busca_Binaria(int * S, int inicio, int fim, int
k)
{ int meio; if( inicio > fim ) return(false);
if(S[meio] == k) return(true);
|
Busca Seqüencial (74) - Comparações com 2 , 4 , 7 , 9
, 20 , 30 , 35 , 50 , 58 , 66 , 68 , 70 , 72 , 73 , 74
Busca Binária (74) - Comparações com 58 (S[9])
, 72 (S[13]) , 74 (S[15).
Árvore
Vazia ( ) |
![]() (A () ()) |
![]() (A (B () () ) ()) |
![]() (A (B () ()) (C () ()) |
![]() (A (B () ()) (C (D () ()) ())) |
|
|
|
|
|
Struct SNo /* Estrutura que pode ser usada na construção
de uma árvore em C */
{
int Chave;
SNo * FilhoEsq;
SNo * FilhoDir;
};
SNo * Raiz;
Pré-ordem* | Ordem Simétrica* | Pós-ordem* |
void Percorre(SNo * r)
{ visita(r); if( r->FilhoEsq != NULL) { Percorre(r->FilhoEsq); } if( r->FilhoDir != NULL) { Percorre(r->FilhoDir); } } |
void Percorre(SNo * r)
{ if( r->FilhoEsq != NULL) { Percorre(r->FilhoEsq); } visita(r); if( r->FilhoDir != NULL) { Percorre(r->FilhoDir); } } |
void Percorre(SNo * r)
{ if( r->FilhoEsq != NULL) { Percorre(r->FilhoEsq); } if( r->FilhoDir != NULL) { Percorre(r->FilhoDir); } visita(r); } |
76 - 50 - 10 - 2 - 45 - 70 - 80 - 98 | 2 - 10 - 45 - 50 - 70 - 76 - 80 - 98 | 2 - 45 - 10 - 70 - 50 - 98 - 80 - 76 |
void Percorre(SNo * r)
{
if( r != NULL )
{
Percorre(r->FilhoEsq);
Percorre(r->FilhoDir);
visita(r);
}
}
Exercício: implementar algoritmos de percurso em profundidade utilizando uma pilha explícita ao invés de recursão.
int Altura(SNo * r)
{
int AlturaE , AlturaD;
if( r != NULL )
{
AlturaE = Altura(r->FilhoEsq);
AlturaD = Altura(r->FilhoDir);
if( AlturaE > AlturaD ) return(
AlturaE + 1);
else return(AlturaD + 1);
}
else return(0);
}
Lema 1: Em uma árvore binária T com n > 0 nós,
o número de sub-árvores vazias, v(T), é n + 1.
Prova: (Por indução em n).
Base: (n=1)