Обмен данными между классами - C#
Формулировка задачи:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication10
{
public partial class Form1 : Form
{
Tree tr;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Random rnd = new Random();
for (int i = 0; i < 100; i++)
{
listBox1.Items.Add(rnd.Next(1, 1000));
}
}
private void button1_Click(object sender, EventArgs e)
{
tr = new Tree(null, null, null);
for (int i = 0; i < 100; i++)
{
tr.Insert(new Data(int.Parse(listBox1.Items[i].ToString()), ""));
}
}
private void button2_Click(object sender, EventArgs e)
{
tr.traverse(tr);
}
}
////////////////////////
class Data
{
public int k;
public string v;
public Data(int nk, string nv)
{
k = nk;
v = nv;
}
}
class Tree
{
public List<int> lst = new List<int>();
Data data;
Tree left;
Tree right;
public Tree(Data nd, Tree nl, Tree nr)
{
data = nd;
left = nl;
right = nr;
}
public void Insert(Data ndata)
{
if (this.data == null)
{
// MessageBox.Show("V " + ndata.k.ToString());
this.data = ndata;
}
else
{
if (ndata.k < this.data.k)
{
if (left == null)
{
//MessageBox.Show("Пишу лево " + ndata.k.ToString());
this.left = new Tree(ndata, null, null);
}
else
{
//MessageBox.Show("Перехожу лево " + ndata.k.ToString());
left.Insert(ndata);
}
}
else if (ndata.k >= this.data.k)
{
if (right == null)
{
// MessageBox.Show("Пишу право " + ndata.k.ToString());
this.right = new Tree(ndata, null, null);
}
else
{
//MessageBox.Show("Перехожу право " + ndata.k.ToString());
right.Insert(ndata);
}
}
else
throw new Exception("Узел уже существует");//no fuckin' way!
}
}
public void traverse(Tree visitor)
{
if (left != null)
{
left.traverse(left);
}
MessageBox.Show(this.data.k.ToString());
//данные this.data.k.ToString() надо добавить в листбокс в форме
if (right != null)
{
right.traverse(right);
}
}
}
////////////////////////////////
}Решение задачи: «Обмен данными между классами»
textual
Листинг программы
using System;
public interface TreeVisitor<T> where T : IComparable<T>
{
void Visit(Tree<T> node);
}
public class KeyPrinter<T> : TreeVisitor<T> where T : IComparable<T>
{
public void Visit(Tree<T> tree)
{
Console.Write("{0} ", tree.Key);
}
}
public class Tree<T> where T: IComparable<T>
{
public Tree(T key)
{
this.Key = key;
}
public Tree<T> Left { get; set; }
public Tree<T> Right { get; set; }
public T Key { get; set; }
public void Insert(Tree<T> tree)
{
if (tree.Key.CompareTo(this.Key) < 0)
if (Left != null)
Left.Insert(tree);
else
Left = tree;
else
if (Right != null)
Right.Insert(tree);
else
Right = tree;
}
public void Traverse(TreeVisitor<T> visitor)
{
if (Left != null)
Left.Traverse(visitor);
visitor.Visit(this);
if (Right != null)
Right.Traverse(visitor);
}
}
class Program
{
static void Main(string[] args)
{
Tree<int> tree = new Tree<int>(7);
tree.Insert(new Tree<int>(5));
tree.Insert(new Tree<int>(9));
tree.Traverse(new KeyPrinter<int>());
Console.ReadKey(true);
}
}