2017-02-24 6 views
0

J'ai un arbre de noeuds sous cette forme:Qu'est-ce que traversal produira la sortie je besoin

enter image description here

Je dois pouvoir traverser l'arbre afin de produire la sortie:

a/b + c

les noeuds marqués « nœud » sont de structure et je sais quels noeuds sont ceux qui contiennent les valeurs correctes de sorte que la sortie peut être:

un noeud/b noeud noeud + noeud c noeud

que lorsque les excès noeuds sont supprimés la sortie sera toujours:

a/b + c

Je pense que je dois mettre en œuvre un traversal afinde mais je me bats pour que tout fonctionne correctement.

modifier:

public IEnumerable<Node> PostOrder(Node start, Func<Node, IEnumerable<Node>> getNeighbours) 
{ 
    HashSet<Node> visited = new HashSet<Node>(); 
    Stack<Node> stack = new Stack<Node>(); 
    stack.Push(start); 

    while (stack.Count != 0) 
    { 
     Node current = stack.Pop(); 
     visited.Add(current); 
     yield return current; 

     IEnumerable<Node> neighbours = getNeighbours(current).Where(node => !visited.Contains(node)); 

     foreach (Node neighbour in neighbours) 
     { 
      stack.Push(neighbour); 
     } 
    } 
} 

Cependant cela retourne la liste:

Racine, noeud, c, noeud, +, noeud, noeud, b, noeud, /, nœud, un

(va de gauche à droite)

+1

Avez-vous essayé une traversée après commande? –

+0

@LeoBartkus Oui, j'ajouterai l'algorithme que j'ai essayé d'utiliser à la question – cookies

Répondre

1

J'étais stupide ...

J'ai juste besoin d'inverser la sortie.

Juste un de ces jours -_-