2016-05-04 17 views
0

恐らく超簡単な質問ですが、私はFormsのやり方についてはわかりません。WindowsでBSTのプレオーダーを印刷してくださいフォームのラベル

WinformのコードでPreorder traversalメソッド(別のクラスで実装されています)を呼び出して、PreorderがFormインターフェイスのラベルに印刷されるようにする必要があります。

私はBSTクラスを持っています。ここには、Preorderでツリーをトラバースする方法があります。ツリーに値を挿入する方法もあります。ように:

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

ここでは、私はWindowsフォームインターフェイスがあります。それは、は(inputTextBoxに値を入力してbtnCreateをクリックして)ツリーに値の追加とため、新しいツリーを作成するためのコードは(PaintTree経由で)ユーザーにツリーを表示持っていますが、私はまた、印刷する必要がありますツリーのPreorderをユーザ(たとえば、インタフェースのラベルに)に追加します。

私はこのために "PreorderLabel"というラベルがインターフェイスにあります。こちらは予約注文をに印刷したいと思っています。

フォームのコードは次のようになります。だから、

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); } 
    } 

、ユーザーが[追加]ボタン(btnAdd)、唯一のInsertメソッドがツリー「_tree」によって呼び出されなければならないではない、とPaintTree方法をクリックして木を見せるために呼ばれる。 Preorderメソッドを呼び出すと"PreorderLabel"というラベルのPreorderをに印刷します。

これはどのように行われますか?

私はすべての助けを喜ぶでしょう!

+0

プリオーダートラバーサルメソッドコードが最初のコード貼り付けに表示されますか?または? – mbksr

+0

これは主に、**ラベル**の**印刷**が意味することが明確でないため、超簡単な質問*ではありません。ラベルはちょうど静的なテキストですが、本当に**印刷**したいですか? –

+0

申し訳ありません。私は、 "label.Text"をユーザが値を追加するたびにpreorderでTreeノードの文字列に変更するようなことを考えています。それはそこに印刷したいものです。 – mbksr

答えて

0

あなたは以下のような区切り文字列でString.Join(string separator, IEnumerable<string> values)メソッドを使用することができます。

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

PreOrder()方法は、我々は唯一のstringint値を変換されて実行する必要があるので、何IEnumerable<int>インスタンスを返します。

関連する問題