2014-05-01 4 views
1

J'ai un tableau dont j'ai besoin pour le transformer en arbre N-aire. Je connais la valeur de N et le nombre total de nœuds.comment transformer un tableau en arbre N-aire?

Je vous donne un exemple dans l'image ci-dessous. L'arbre N-aire doit être commandé comme illustré.

Link to image here

Je ne peux pas comprendre. J'ai besoin d'un algorithme pour le faire. Le programme que j'écris est en javascript mais une réponse en pseudocode est bien aussi.

Appréciez votre aide!

[Modifié]

J'ai trouvé une solution en utilisant l'algorithme d'ici: Construct a complete K-ary tree from preorder traversal

Répondre

0

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; 
} 
+0

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 –

+0

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

+0

Merci pour votre aide, mais j'ai trouvé ma solution. J'ai édité la question et ajouté la solution! –

Questions connexes