可能是超级简单的问题,但我不知道如何使用Forms。
我需要在Winform的代码中调用Preorder遍历方法(在另一个类中实现),以便在Form接口的标签中打印Preorder。
所以我有一个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),但我还需要打印树的预订单给用户(例如在界面中的标签中)。
假设我在界面中有一个名为&#34; PreorderLabel&#34;为了这;这是我希望打印预订。
表格的代码如下:
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); }
}
因此,当用户单击Add按钮(btnAdd)时,不仅要由树&#34; _tree&#34;调用Insert方法,还要调用PaintTree方法来显示树;而且还要调用Preorder方法在标签中打印Preorder&#34; PreorderLabel&#34; 。
如何做到这一点?
我非常乐意为所有人提供帮助!
答案 0 :(得分:0)
您可以使用0
方法和下面的分隔符字符串:
String.Join(string separator, IEnumerable<string> values)
PreorderLabel.Text = String.Join("; ", _tree.PreOrder().Select(item => item.ToString()));
方法将返回PreOrder()
个实例,因此我们需要做的只是将IEnumerable<int>
值转换为int
。