2016-02-21 2 views
-2

J'ai fait un arbre n-aire de base en C#:Comment imprimer visuellement un arbre n-aire dans C#?

Arbre:

public class Tree<T> 
{ 
    private Node<T> root; 

    public Tree() 
    { 
     root = null; 
    } 


    public Node<T> Root 
    { 
     get 
     { 
      return root; 
     } 

     set 
     { 
      root = value; 
     } 
    } 

    public T search (T data) 
    { 
     return (root != null) ? raiz.search(data) : default(T); 
    } 

}

Noeud:

public class Node<T> 
{ 
    private T data; 
    private List<Node<T>> childs; 

    public Node(T data) 
    { 
     this.data = data; 
     this.childs = null; 
    } 

    public T Data 
    { 
     get 
     { 
      return data; 
     } 

     set 
     { 
      data = value; 
     } 
    } 

    public List<NodoArbol<T>> Childs 
    { 
     get 
     { 
      return childs; 
     } 

     set 
     { 
      childs = value; 
     } 
    } 

    public void addChild(Node node) 
    { 
     if (child == null) 
     { 
      childs = new List<Node<T>>(); 
     } 
      childs.Add(node); 

    } 


    public T search(T data) 
    { 
     if (this.data.Equals(data)) 
     { 
      return this.data; 
     }else 
     { 
      for (int i = 0; i < childs.Count; i++) 
      { 
       T aux = childs.ElementAt(i).search(data); 
       if (aux != null) 
       { 
        return aux; 
       } 
      } 
      return default(T); 
     } 
    } 
} 

Je voudrais une représentation visuelle de l'arbre afin que je puisse rapidement tester si les enfants et les noeuds sont au bon endroit et tester mes traversées (pré-commande/en ordre/post-commande) quelque chose comme ça

enter image description here

+0

Utilisez-vous WinForms ou WPF? –

+0

Avez-vous une question Bryan? – Mathemats

+0

Nous ne sommes pas un service d'écriture de code même si vous nous avez fourni une structure de données – MickyD

Répondre

1

Si vous suffit de sortie à la console:

public void PrintTree(Node node, int indentSize, int currentLevel) 
{ 
    var currentNode = string.Format("{0}{1}", new string(" ",indentSize*currentLevel, node.Data); 
    Console.WriteLine(currentNode) 
    foreach(var child in node.Children) 
    { 
     PrintTree(child, indentSize, currentLevel+1); 
    } 
} 

Et puis appeler comme ça

PrintTree(yourTreeInstance.Root,4,0); 

Vous pouvez également utiliser Debug.WriteLine pour sortie Console de débogage au lieu de la console principale