Nenhuma animação disponível para revisar!
Árvore Patrícia
Entrada:
HUB
1/1
EstruturaPatricia
{
Palavra : String;
Direita : EstruturaPatricia;
Abaixo : EstruturaPatricia;
PalavraFinal : booleano;
}
i,compPalavra,compPalavraNo : inteiro;
i := 0;
compPalavra := Comprimento(Palavra);
compPalavraNo := Comprimento(No.Palavra);
 
Enquanto i < compPalavraNo e i < compPalavra e No.Palavra[i] == Palavra[i] faça
i := i + 1;
 
Se i < compPalavraNo e i < compPalavra então
INICIO
Se i == 0 então
INICIO
Se Palavra[0] > No.Palavra[0] então
INICIO
Se No.Direita != nulo então
Insere(No.Direita,Palavra);
Senão
INICIO
No.Direita := alocar();
No.Direita.PalavraFinal := Verdadeiro;
No.Direita.Palavra := Palavra;
No.Direita.Direita := nulo;
No.Direita.Abaixo := nulo;
FIM
FIM
Senão
INICIO
novo : EstruturaPatricia;
novo := alocar();
novo.Direita := No;
novo.Abaixo := nulo;
novo.Palavra := Palavra;
novo.PalavraFinal := Verdadeiro;
No := novo;
FIM
FIM
Senão
INICIO
primeira_parte : String;
segunda_parte : String;
primeira_parte := SubPalavra(No.Palavra,0,i);
segunda_parte := SubPalavra(No.Palavra,i,compPalavraNo);
 
novo: EstruturaPatricia;
novo := alocar();
novo.Palavra := segunda_parte;
novo.Abaixo := No.Abaixo;
novo.Direita := nulo
 
No.Abaixo := novo;
No.Palavra := primeira_parte;
 
Se No.PalavraFinal == Verdadeiro então
INICIO
No.PalavraFinal := Falso;
novo.PalavraFinal := Verdadeiro;
FIM
 
Insere(novo,SubPalavra(Palavra,i,compPalavra));
FIM
Retonar;
FIM
 
Se compPalavra == compPalavraNo então
No.PalavraFinal := Verdadeiro;
Senão
INICIO
Se i == compPalavraNo então
INICIO
Se No.Abaixo != nulo então
Insere(No.Abaixo,SubPalavra(Palavra,i,compPalavra));
Senão
INICIO
No.Abaixo := alocar();
No.Abaixo.PalavraFinal := Verdadeiro;
No.Abaixo.Palavra := SubPalavra(Palavra,i,compPalavra);
No.Abaixo.Direita := nulo;
No.Abaixo.Abaixo := nulo;
FIM
FIM
Senão
INICIO
novo : EstruturaPatricia;
novo := alocar();
novo.Abaixo := No.Abaixo;
No.Abaixo := novo;
No.Direita := nulo;
novo.Palavra := SubPalavra(No.Palavra,i,compPalavraNo);
No.Palavra := SubPalavra(No.Palavra,0,i);
No.PalavraFinal := Verdadeiro;
novo.PalavraFinal := Verdadeiro;
FIM
FIM
saida : String tamanho fim - inicio;
j : inteiro;
j := inicio;
Para i:inteiro de inicio até fim passo 1 faça
INICIO
saida[j-inicio] := Palavra[i];
j := j + 1;
FIM
Retornar saida;
i : inteiro;
i := 0;
Enquanto Palavra[i] == nulo ou Palavra[i]==' ' faça
i := i + 1;
Retornar i;
Se Palavra[0] == No.Info[0] então
INICIO
Se Comprimento(Palavra) > Comprimento(No.Info) então
INICIO
Se IniciaCom(Palavra,No.Info) então
INICIO
Palavra := SubPalavra(Palavra,0,Comprimento(No.Info));
Se No.Abaixo != nulo então
Remove(No.Abaixo,Palavra,No,No);
FIM
FIM
Senão se Palavra == No.Info e No.PalavraFinal então
INICIO
Se Anterior == nulo então
INICIO
Se No.Abaixo == nulo então
No := No.Direita;
Senão
INICIO
Se No.Abaixo.Direita != nulo então
No.FinalPalavraFinal := Falso;
Senão
INICIO
No.Info := Concatenar(No.Info,No.Abaixo.Info);
No.Abaixo := No.Abaixo.Abaixo;
FIM
FIM
FIM
Senão se Anterior.Abaixo == No então
INICIO
Se No.Abaixo == nulo então
INICIO
Anterior.Abaixo := No.Direita;
Se No.Direita != nulo e No.Direita.Direita == nulo
INICIO
Anterior.Info := Concatenar(Anterior.Info,No.Direita.Info);
Anterior.PalavraFinal := Verdadeiro;
No.Abaixo := nulo;
FIM
FIM
Senão
INICIO
Se No.Abaixo.Direita != nulo então
No.PalavraFinal := Falso;
Senão se No.Abaixo != nulo e No.Abaixo.Direita == nulo então
INICIO
No.Info := Concatenar(No.Info,No.Abaixo.Info);
No.Abaixo := No.Abaixo.Abaixo;
FIM
FIM
FIM
Senão se Anterior.Direita == No então
INICIO
Se No.Abaixo == nulo então
INICIO
Se UltimoPai.Abaixo == Anterior e Anterior.Direita == nulo então
INICIO
Anterior.PalavraFinal := UltimoPai.PalavraFinal || Anterior.PalavraFinal;
ultimoPai.info := Concatenar(ultimoPai.info,ultimoRelevante.info);
ultimoPai.abaixo := nulo;
FIM
FIM
Senão
INICIO
Se No.Abaixo.Direita == nulo então
INICIO
No.Info := Concatenar(No.Info,No.Abaixo.Info);
No.Abaixo := No.Abaixo.Abaixo;
FIM
Senão
No.PalavraFinal := Falso;
FIM
FIM
FIM
FIM
Senão se No.Direita != nulo e Palavra[0] > No.Info[0] então
Remove(No.Direita,Palavra,No,UltimoPai);
tamanhoA,tamanhoB : inteiro;
tamanhoA := Comprimento(PalavraA);
tamanhoB := Comprimento(PalavraB);
 
Se tamanhoB > tamanhoA então
Retornar Falso;
Senão
INICIO
i : inteiro;
i := 0;
Enquanto i < tamanhoB faça
INICIO
Se PalavraA[i] != PalavraB[i] então
Retornar Falso;
i := i + 1;
FIM
FIM
Retornar Verdadeiro;
tamanhoA,tamanhoB : inteiro;
tamanhoA := Comprimento(PalavraA);
tamanhoB := Comprimento(PalavraB);
j : inteiro;
j := 0;
saida : String tamanho [tamanhoA + tamanhoB]
Para i:inteiro de 0 até PalavraA[i] == nulo ou PalavraA[i]==' ' passo 1 faça
INICIO
saida[j] := PalavraA[i];
j := j + 1;
FIM
Para i:inteiro de 0 até PalavraA[i] == nulo ou PalavraA[i]==' ' passo 1 faça
INICIO
saida[j] := PalavraB[i]
j := j + 1;
FIM
Retornar saida;
saida : String tamanho fim - inicio;
j : inteiro;
j := inicio;
Para i:inteiro de inicio até fim passo 1 faça
INICIO
saida[j-inicio] := Palavra[i];
j := j + 1;
FIM
Retornar saida;
i : inteiro;
i := 0;
Enquanto Palavra[i] == nulo ou Palavra[i]==' ' faça
i := i + 1;
Retornar i;
compBusca,compBuscaNo : inteiro;
compBusca := Comprimento(INFO);
compBuscaNo := Comprimento(No.Palavra);
 
Se compBusca < compBuscaNo então
INICIO
Se INFO[0] > No.Palavra[0] então
INICIO
Se No.Direita != nulo então
Retornar Busca(No.Direita,INFO);
Senão
Retornar Falso;
FIM
FIM
 
b : vetor de caracteres;
b := SubPalavra(busca,0,compBuscaNo);
 
Se b[0] > No.Palavra[0] então
INICIO
Se No.Direita != nulo então
Retornar Busca(No.Direita,busca);
Senão
Retornar Falso;
FIM
 
Se Igual(b,No.Palavra) então
INICIO
Se compBusca == compBuscaNo então
Retornar No.PalavraFinal;
Senão Se No.Abaixo != nulo então
Retornar Busca(No.Abaixo,SubPalavra(INFO,compBuscaNo,compBusca));
FIM
 
saida : String tamanho fim - inicio;
j : inteiro;
j := inicio;
Para i:inteiro de inicio até fim passo 1 faça
INICIO
saida[j-inicio] := Palavra[i];
j := j + 1;
FIM
Retornar saida;
i : inteiro;
i := 0;
Enquanto Palavra[i] == nulo ou Palavra[i]==' ' faça
i := i + 1;
Retornar i;
Nenhuma animação disponível para revisar!
Executando animação ...
Aguarde encerrar !
Última animação que foi executada:
| # | Descrição |
|---|
Limpar entrada ao final da animação
Chance de gerar número negativo na entrada aleatória:
Ocultar Ponteiros Nulos
Impedir inserção de valores repetidos
Mostrar Descritores
Usar delimitador em chaves
Contar linhas brancas
Pseudo-código
Informações da Estrutura
Entradas Programadas
Rever Passos
Histórico
Árvore Patrícia