Лабораторная работа № 5 «представление и реализация «бинарного дерева»»
Цель работы: исследовать и изучить АТД «дерево».
Задача работы: овладеть навыками составления структур АТД «дерево» и написания программ по исследованию АТД «дерево» на любом языке программирования.
Порядок работы:
изучить описание лабораторной работы;
по заданию, данному преподавателем, разработать структуру АТД «дерево»;
написать программу на языке С#;
отладить программу;
решить задачу;
оформить отчет.
Краткая теория
Пример создания дерева.
namespace WindowsFormsApplication1
{
public partial class Обход : Form
{
public List<TreeElement> arrayList = new List<TreeElement>();
public TreeElement myStruct;
public struct TreeElement
{
public int left;
public int right;
public bool mark;
public string val;
}
public Обход()
{
InitializeComponent();
}
public int Priam(int v)
{
textBox1.Text = textBox1.Text +' '+ arrayList[v].val;
if (arrayList[v].left != -1) Priam(arrayList[v].left);
if (arrayList[v].right != -1) Priam(arrayList[v].right);
return 0;
}
public int Obrat(int v)
{
if (arrayList[v].left != -1) Obrat(arrayList[v].left);
if (arrayList[v].right != -1) Obrat(arrayList[v].right);
textBox1.Text = textBox1.Text + ' ' + arrayList[v].val;
return 0;
}
public int Simetr(int v)
{
if (arrayList[v].left != -1) Obrat(arrayList[v].left);
textBox1.Text = textBox1.Text + ' ' + arrayList[v].val;
if (arrayList[v].right != -1) Obrat(arrayList[v].right);
return 0;
}
private void button1_Click(object sender, EventArgs e)
{
myStruct.left = 1;
myStruct.right = 2;
myStruct.mark = false;
myStruct.val = "a";
arrayList.Add(myStruct);
myStruct.left = 3;
myStruct.right = 4;
myStruct.mark = false;
myStruct.val = "b";
arrayList.Add(myStruct);
myStruct.left = 5;
myStruct.right = 6;
myStruct.mark = false;
myStruct.val = "c";
arrayList.Add(myStruct);
myStruct.left = -1;
myStruct.right = -1;
myStruct.mark = false;
myStruct.val = "d";
arrayList.Add(myStruct);
myStruct.left = 7;
myStruct.right = -1;
myStruct.mark = false;
myStruct.val = "f";
arrayList.Add(myStruct);
myStruct.left = -1;
myStruct.right = -1;
myStruct.mark = false;
myStruct.val = "g";
arrayList.Add(myStruct);
myStruct.left = -1;
myStruct.right = -1;
myStruct.mark = false;
myStruct.val = "k";
arrayList.Add(myStruct);
myStruct.left = -1;
myStruct.right = -1;
myStruct.mark = false;
myStruct.val = "l";
arrayList.Add(myStruct);
прямой обход дерева
private void button2_Click(object sender, EventArgs e)
{
textBox1.Text = textBox1.Text + '\r' + '\n' + "Прямой обход ";
Priam(0);
}
Обратный обход
private void button3_Click(object sender, EventArgs e)
{
textBox1.Text = textBox1.Text + '\r' + '\n' + "Обратный обход ";
Obrat(0);
}
Симметричный обход
private void button4_Click(object sender, EventArgs e)
{
textBox1.Text = textBox1.Text + '\r' + '\n' + "Симметричный обход ";
Simetr(0);
}
Реализация дерева посредством левыъ сыновей и правых братьев
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var arrayList = new ArrayList();
for (int i = 0; i < 11; i++)
{
var treeElement = new TreeElement();
arrayList.Add(treeElement);
}
var myStruct1 = (TreeElement)arrayList[1];// у элемента 2 1-родитель 3- левый сын 8 - правый брат
myStruct1.parent = 1;
myStruct1.son = 3;
myStruct1.brother = 8;
var myStruct2 = (TreeElement)arrayList[2];// у элемента 3 2-родитель 4 и 5- правые братья
myStruct2.parent = 2;
myStruct2.brother = 4;
myStruct2.brother = 5;
var myStruct4 = (TreeElement)arrayList[4];// у элемента 5 2- родитель 6 - сын
myStruct4.parent = 2;
myStruct4.son = 6;
var myStruct5 = (TreeElement)arrayList[5]; // у элемента 8 1- родитель 7- сын
myStruct5.parent = 1;
myStruct5.son = 7;
}
private void textBox1_TextChanged(object sender, EventArgs e)