Учебное пособие C#. Алгоритмы и структуры данных н. А. Тюкачев, В. Г. Хлебостроев издание третье, стереотипное 1 / 23


Листинг 4.4. Функция добавления узла в упорядоченное дерево


Download 1.85 Mb.
Pdf ko'rish
bet50/111
Sana19.11.2023
Hajmi1.85 Mb.
#1786905
TuriУчебное пособие
1   ...   46   47   48   49   50   51   52   53   ...   111
Bog'liq
C# Алгоритмы и структуры данных 2018 Тюкачев, Хлебостроев

Листинг 4.4. Функция добавления узла в упорядоченное дерево 
public void Insert(ref Node t, int data, int x, int 
y)
11 / 23


81 
// 
вставка 

if (t == null) 
t = new Node(null, null, data, x, y); 
else 
if (data <= Convert.ToInt32(t.data)) 
Insert(ref t.left, data, t.x - step,
t.y + dh * step); 
else 
Insert(ref t.right, data, t.x + step,
t.y + dh* step); 

Следует отметить, что в данной функции параметр t передается как па-
раметр-переменная, а не как параметр-значение в функциях листинга 4.1. Это 
существенно, поскольку в случае включения нового узла параметру-
переменной должно присваиваться новое значение – ссылка на включенный 
узел, старое значение параметра было равно null.
Рис. 4.2. Форма для работы с деревьями 
На рисунке 4.2 приведена форма проекта «Упорядоченное дерево», со-
держащая следующие элементы управления: 
текстовое поле, в котором вводятся значения для узлов дерева; 
12 / 23


82 
− кнопка «Создать дерево», при нажатии на которую генерируется 
последовательность случайных чисел, на ее основе создается упо-
рядоченное дерево и строится его изображение;
− кнопка «Найти узел», при нажатии на которую ищется узел дере-
ва с указанным значением; 
− кнопка «Добавить узел», при нажатии на которую в дерево добав-
ляется узел с указанным значением информационного поля; 
− кнопка «Удалить узел», при нажатии на которую удаляется узел с 
указанным значением; 
Построение упорядоченного дерева производится с помощью приве-
денной выше процедуры Insert().
Листинг 4.5. Создание дерева 
private void btnCreate_Click(object sender, Even-
tArgs e) 

int L = textBox1.Lines.Count(); 
for (int i = 0; i < L; i++) 

if (textBox1.Lines[i] != "") 

int k = Convert.ToInt32(textBox1.Lines[i]); 
myTree.Insert(ref myTree.top, k, 200, 40); 


MyDraw(); 

Рисование же дерева использует алгоритм обхода дерева способом 
«сверху-вниз», поэтому построение изображения дерева начинается с его 
корня. Затем рисуются узлы левого поддерева, затем правого. При прорисов-
ке узла запоминаются его координаты, которые используются как при прори-
совке ветвей текущего дерева, так и при повторной прорисовке дерева, если 
менять мышкой положение его узлов на форме. Основные процедуры приве-
дены в листинге 4.6. 
13 / 23


83 

Download 1.85 Mb.

Do'stlaringiz bilan baham:
1   ...   46   47   48   49   50   51   52   53   ...   111




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling