Récursif de l'arbre de création

J'ai un Node classe en C# avec les propriétés suivantes:

public class Node
{
   public int Id {get;set;}
   public int? ParentId {get;set;}
   public string Label {get;set;}
}

J'ai un TreeView de contrôle qui fournit la méthode suivante pour créer
un nouveau nœud:

MyTreeView.CreateNode(key, label);
parent.Nodes.CreateNode(key, label);

Si je veux ajouter un nouveau nœud enfant j'ai besoin d'utiliser la deuxième méthode, sinon la première. Les deux renvoie un objet de type TreeNode.

Comment voulez-vous créer en C# une fonction récursive pour remplir le treeview considérant que la racine des nœuds ont ParentId = null?

C'est ce que j'ai fait jusqu'à présent:

//create a list of root nodes
var roots = myList.Where(x => x.ParentId == null);
//send the roots to a recursive func
foreach(var root in roots)
{
   AddNode(null,root,myList);
}

c'est ma fonction récursive:

private void AddNode(Node parent, Node current, IList<Node> items)
{
   TreeNode treenode = null;
   if(parent == null)
   {
      treenode = mytree.CreateNode(current.Id.ToString(), current.Label);
   }else{
      var parentnode = mytree.GetNode(parent.Id.ToString());
      treenode = parentnode.Nodes.CreateNode(current.Id.ToString(), current.Label);
   }
   //call the recursion for the children
   var children = items.Where(x => x.ParentId == current.Id);
   foreach(var child in children)
   {
      AddNode(current, child, items);
   }
}
  • Vous avez besoin d'ajouter le C# tag. Si c'est les devoirs, vous devez ajouter les devoirs balise ainsi. Aussi, vous devez nous montrer un exemple de code de ce que vous avez essayé.
  • Ok, je vais modifier le post, merci.
  • quel est le problème avec cette fonction? outre le fait que vous n'avez pas besoin de la variable treenode
  • C'est mal parce que je dois tout faire en un seul appel, ce que je fais ici est de deux appels. J'ai bien sur l'ajout d'une extension avec LinQ mais je ne suis pas si bon avec elle.
  • Vous avez oublié de mentionner quelque chose qui me semble très important. Vous êtes de la génération de votre arbre à partir d'une sorte de IList Ce qui est dans votre liste? On peut faire une inférence, mais ne Pouvez pas savoir à coup sûr
  • Qu'entendez-vous par 2 appels? Par définition d'une fonction récursive, vous avez besoin d'au moins 2 appels: l'Un pour la première itération et Un pour la récursivité. Et la fonction que vous semble correcte, même si elle est loin d'être optimum.

InformationsquelleAutor Raffaeu | 2012-07-06