Voici un code pseudo/C# version. Veuillez poser toutes les questions relatives à C# dans les commentaires. L'élément clé ici est l'utilisation d'une structure de données premier entré, premier sorti, la file d'attente parents
dans l'extrait ci-dessous. La méthode convertToN_aryTree
renvoie le nœud racine de l'arborescence n-aire résultante.
public class Node
{
public int data;
public int nCount; // 'n' in n-ary
public Node[] children; // this needs to be initialised to length n
public Node(int d, int n)
{
data = d;
nCount = n;
children = new Node[n];
}
}
// data is teh array and n is branch factor of the tree
Node convertToN_aryTree(int[] data, int n)
{
if(data.Length == 0)
{
return null;
}
Node root = new Node(data[0], n);
Node currParent = root;
Node curr;
int currChildCount = 0;
Queue<Node> parents = new Queue();
for(int i = 1; i<data.Length; i++)
{
curr = new Node(data[i], n);
currParent.children[currChildCount] = curr;
parents.Enqueue(curr);
currChildCount++;
if(currChildCount >= n) // finished with children of this node, so start adding to children of the next.
{ // next node is either a sibling or a child but that is taken care of by Queue.
currParent = parents.Dequeue();
currChildCount = 0;
}
}
return root;
}
Merci pour votre réponse, mais cet algorithme ne me donne pas le bon ordre des nœuds. voir cette image: http://www.tiikoni.com/tis/view/?id=5f6ae9f Existe-t-il un moyen de réorganiser l'arbre dans la forme correcte que je veux? Merci beaucoup –
Vous ne pouvez pas construire l'arbre juste à partir du tableau donné. La raison est la suivante. Dans votre exemple, l'arbre représente une traversée de pré-commande du tableau. La question est donc de construire un arbre, avec une traversée pré-commande, ce qui n'est pas possible (http://www.geeksforgeeks.org/if-you-are-given-two-traversal-sequences-can-you- Construire l'arbre binaire /). Nous avons besoin de plus de contraintes, comme une traversée dans l'ordre, en plus de la traversée pré-commande donnée. – bytefire
Merci pour votre aide, mais j'ai trouvé ma solution. J'ai édité la question et ajouté la solution! –