Реализация двоичного дерева без использования готовых методов - C#
Формулировка задачи:
Есть ли примеры кода, как реализовать двоичное дерево без использования готовых методов.
Решение задачи: «Реализация двоичного дерева без использования готовых методов»
textual
Листинг программы
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);
}
}
}
////////////////////////////////
}