Isso pode ser muito ingênuo, mas eu estava pensando, é o contexto de árvores binárias (planas, ordenadas e equilibradas), de todos os tipos transversais:
- pré-encomenda em profundidade
- profundidade primeiro em ordem
- primeira ordem de profundidade
- largura primeiro
qual é a utilidade real dos pré e pós-pedido? Quero dizer, existe algum tipo e / ou configuração de árvore binária na qual a travessia pré e / ou pós-ordem daria uma (algumas) vantagem (s) sobre as outras duas?
AFAICS, existem certos tipos e configurações de árvores binárias para as quais a ordem e a largura da primeira podem oferecer uma certa vantagem:
para uma árvore binária balanceada, qualquer percurso em profundidade utilizará menos espaço de armazenamento de memória em comparação com a largura primeiro (por exemplo, para árvore binária balanceada de 6 ou 7 nós, a altura é 2; portanto, qualquer percurso em profundidade precisará armazenar no máximo 2 nós a qualquer momento, enquanto o último nível tiver 3 ou 4 nós; portanto, a travessia em largura primeiro precisará armazenar até 3 ou 4 nós em algum momento). Nesse caso, o uso da travessia em ordem usa a menor quantidade de memória e visita os nós em sua ordem natural.
para uma árvore binária não balanceada, se estiver próximo do pior cenário de inserção, percorrê-la em largura primeiro usaria menos memória em comparação com qualquer uma das travessias em profundidade. Portanto, neste caso, a amplitude oferece uma vantagem. A travessia em ordem tem novamente a vantagem de visitar valores em sua ordem natural.
No entanto, não consigo pensar em uma situação em que pré e pós-travessia dariam vantagem sobre os outros dois.
fonte
A + B * C
, que é muito mais fácil de entender para usuários normais do que qualquer prefixo da ordem do postfix.O artigo da wikipedia possui uma boa descrição concisa de quando você deseja usar os diferentes tipos de pesquisa profunda:
Tudo se resume às necessidades logísticas de um algoritmo. Por exemplo, se você não usar o percurso de pós-ordem durante a exclusão, perderá as referências necessárias para excluir as árvores filhas.
fonte
O objetivo de ter algoritmos diferentes para lidar com árvores binárias não é fazer coisas com árvores. Nesse nível abstrato, uma ordem é tão boa quanto qualquer outra, pois você só obtém símbolos abstratos do procedimento.
Mas as árvores geralmente são usadas para representar coisas interessantes, e isso pode fazer uma grande diferença no resultado. Por exemplo, se os nós representam estados de pesquisa em uma pesquisa completa em um grande domínio (talvez até um domínio infinito), a descida primeiro vs. o processamento primeiro não apenas determina em que ordem os resultados são encontrados, mas também pode determinar se você nunca encontre todas as soluções . O ponto é mais fácil de ver com domínios infinitos: se você descer sem cautela, poderá ignorar uma solução que fica bem no alto da árvore, simplesmente porque você tomou uma curva errada. Mas, na prática, como a memória e os discos também são finitos, isso se aplica a domínios simplesmente muito grandes, em vez de verdadeiramente infinitos.
fonte