2016-05-04 1 views
0

Probablement une super facile question, mais je n'ai aucune idée de comment faire avec Forms.Imprimer BST précommander sous Windows Form label

J'ai besoin d'appeler une méthode de parcours de précommande (implémentée dans une autre classe) dans un code Winform, de sorte que la précommande soit imprimée dans une étiquette l'interface Formulaire. J'ai donc une classe BST, où il y a une méthode pour parcourir l'arbre en Précommande. Il y a aussi une méthode pour insérer une valeur dans l'arbre. Comme si:

namespace BinaryTree //the BST's class 
{ 
    public partial class BinarySearchTreeNode<T> where T : IComparable<T> 
    { 


public void Insert(T value) //method for inserting 
    { 
     .... 
    } 

public IEnumerable<T> Preorder() //method for Preorder traversal 
    { 
     List<T> preOrdered= new List<T>(); 
     if (_value != null) 
     { 
      preOrdered.Add(Value); 

      if (LeftChild != null) // 
      { 
       preOrdered.AddRange(LeftChild.Preorder()); 
      } 

      if (RightChild != null) // 
      { 
       preOrdered.AddRange(RightChild.Preorder()); 
      } 
     } 
     return preOrdered; 
    } 
} 

Maintenant, pour utiliser ces opérations, j'ai une interface Windows Forms. Il a le code pour Création nouvel arbre, pour Ajouter de la valeur à l'arbre (en tapant la valeur en inputTextBox et en cliquant sur btnCreate) et Afficher l'arbre à l'utilisateur (via PaintTree), mais je dois aussi imprimer la Précommande de l'arbre à l'utilisateur (dans une étiquette dans l'interface par exemple). Dire que j'ai une étiquette dans l'interface appelée "PreorderLabel" pour ceci; C'est où Je veux que la précommande soit imprimée.

Le code de ses formes ressemble à ceci:

namespace BinaryTree 
{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private BinarySearchTree<int> _tree; 


    void PaintTree() 
    { 
     if (_tree == null) return; 
     pictureBox1.Image = _tree.Draw(); 
    } 




    private void btnCreate_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      _tree = new BinarySearchTree<int>(new BinarySearchTreeNode<int>(int.MinValue)); 
      PaintTree(); 
     } 

     catch(NotImplementedException) { MessageBox.Show("There is no implementation!"); } 
    } 


    private void btnAdd_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      var val = int.Parse(inputTextBox.Text); //makes a variable out of the input value from the user, to work with 
      if (_tree == null) 
       btnCreate_Click(btnCreate, new EventArgs()); 
      _tree.Insert(val); //***calls the "Insert" method from the BST class, to insert the value to the tree 
      PaintTree(); //shows the user the tree 

//**this is [I guess] where I need code for printing the tree in Preorder** 
      PreorderLabel.Text = ??????? 

      inputTextBox.SelectAll(); 
      this.Update(); 
     } 

     catch (Exception exp) { MessageBox.Show(exp.Message); } 
    } 

Ainsi, lorsque l'utilisateur clique sur le bouton Ajouter (btnAdd), doit non seulement la méthode Insert appelée par l'arbre « _tree », et la méthode PaintTree être appelé pour montrer l'arbre; mais aussi la méthode de précommande soit appelée imprime la précommande dans l'étiquette "PreorderLabel".

Comment cela serait-il fait?

Je serais super content pour toute aide!

+0

Le code de méthode de parcours de précommande est affiché dans la première pâte de code? Ou? – mbksr

+0

Eh bien, ce n'est pas * super facile question * principalement parce qu'on ne sait pas ce que tu veux dire par ** imprimer ** dans ** étiquette **. L'étiquette est juste un texte statique, que voulez-vous vraiment imprimer ** ici? –

+0

Désolé. Je pense à quelque chose comme changer le "label.Text" à une chaîne de nœuds de l'arbre en précommande chaque fois que l'utilisateur ajoute une valeur, c'est ce que je voudrais imprimer là. – mbksr

Répondre

0

Vous pouvez utiliser la méthode String.Join(string separator, IEnumerable<string> values) avec une chaîne de delimiter comme ci-dessous:

PreorderLabel.Text = String.Join("; ", _tree.PreOrder().Select(item => item.ToString())); 

La méthode PreOrder() retournera IEnumerable<int> par exemple si ce que nous devons faire est de convertir seulement int valeurs string.