J'ai un arbre de noeuds sous cette forme:Qu'est-ce que traversal produira la sortie je besoin
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)
Avez-vous essayé une traversée après commande? –
@LeoBartkus Oui, j'ajouterai l'algorithme que j'ai essayé d'utiliser à la question – cookies