Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа_5-6.docx
Скачиваний:
2
Добавлен:
24.09.2019
Размер:
90.49 Кб
Скачать

Лабораторная работа № 5 «представление и реализация «бинарного дерева»»

Цель работы: исследовать и изучить АТД «дерево».

Задача работы: овладеть навыками составления структур АТД «дерево» и написания программ по исследованию АТД «дерево» на любом языке программирования.

Порядок работы:

  1. изучить описание лабораторной работы;

  2. по заданию, данному преподавателем, разработать структуру АТД «дерево»;

  3. написать программу на языке С#;

  4. отладить программу;

  5. решить задачу;

  6. оформить отчет.

Краткая теория

Пример создания дерева.

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)