Encontre o percurso de pré-ordem de uma árvore binária a partir de sua sequência inorder e pós-ordem

Google Translate Icon

Escreva um algoritmo eficiente para encontrar uma árvore binária travessia de pré-encomenda de seu em ordem e pós-encomenda seqüência sem construir a árvore.

Por exemplo, considere a seguinte árvore:

Print Binary Tree

Input:
 
Inorder traversal is { 4, 2, 1, 7, 5, 8, 3, 6 }
Postorder traversal is { 4, 2, 7, 8, 5, 6, 3, 1 }
 
 
Output:
 
The preorder traversal is { 1, 2, 4, 3, 5, 7, 8, 6 }

Pratique este problema

Começamos com o nó raiz, cujo valor seria o último item na sequência de pós-ordem. A idéia é encontrar os limites da subárvore esquerda e direita do nó raiz em uma determinada sequência inorder. Para encontrar as arestas da subárvore esquerda e direita, procure o índice do nó raiz na sequência inorder. Todas as chaves antes do nó raiz na sequência inorder tornam-se parte da subárvore esquerda e todas as chaves após o nó raiz tornam-se parte da subárvore direita. Se repetirmos isso recursivamentemente para todos os nós da árvore, acabaremos fazendo uma travessia de pré-ordem na árvore.

O algoritmo pode ser implementado da seguinte forma em C++, Java e Python:

C++


Download  Executar código

Resultado:

The preorder traversal is 1 2 4 3 5 7 8 6

Java


Download  Executar código

Resultado:

The preorder traversal is 1 2 4 3 5 7 8 6

Python


Download  Executar código

Resultado:

The preorder traversal is 1 2 4 3 5 7 8 6

A complexidade de tempo da solução acima é O(n), Onde n é o número total de nós na árvore binária. O programa exige O(n) espaço extra para hashmap, pilha e ligue para Stack.

Avalie esta postagem

Classificação média 4.75/5. Contagem de votos: 184

Sem votos até agora! Seja o primeiro a avaliar este post.

Lamentamos que este post não tenha sido útil para você!

Diga-nos como podemos melhorar este post?




Obrigado por ler.

Por favor, use nosso compilador online para postar código em comentários usando C, C++, Java, Python, JavaScript, C#, PHP e muitas outras linguagens de programação populares.

Como nós? Indique-nos aos seus amigos e ajude-nos a crescer. Codificação feliz :)



Se inscrever
Notificar de
guest
2 Comentários
Mais votados
O mais novo Mais antigo
Comentários em linha
Ver todos os comentários
NÃO siga este link ou você será banido do site!