Консультация № 176175
21.01.2010, 00:44
42.70 руб.
0 3 1
Уважаемые эксперты! Необходима помощь с решением этой задачи.

Нужно написать программу создания, вывода и обработки бинарного дерева Т, которое выполняет следующие функции:
1. Подсчитывает число вершин на N-том уровне дерева Т (корень дерева считать вершиной 0-го уровня).
2. Определяет, входит элемент Е в дерево Т.

Пожалуйста, очень надеюсь, что вы поможете.

Обсуждение

давно
Профессионал
304622
583
21.01.2010, 11:37
общий
Камынин Владислав Дмитриевич:
Надо написать новую или можно к предыдущей добавить?
Неизвестный
22.01.2010, 10:00
общий
Сергей Бендер, можно к предыдущей добавить.
давно
Профессионал
304622
583
23.01.2010, 10:07
общий
это ответ
Здравствуйте, Камынин Владислав Дмитриевич.

Итак, как договорились, добавка к 176070. Кладу только pas-файл -- думаю, ты покрутишь, что надо. Я добавил элементы интерфейса так, как _мне_ удобно: с кнопками и лейблами. Это не в том стиле, как у твоей заготовки, -- переделаем, если надо. По задачам:
1. Рекурсивная _функция_, т.е. из дерева берётся результат. Из разных веток может быть разный результат за счёт того, они могут оборваться, не дойдя до нужного уровня. Из-за этого же два терминальных условия: на достижения уровня и на достижение nil раньше уровня.
2. Тоже рекурсивная функция, только логическая. Структура практически такая же -- вместо арифметических операторов, логические.


Приложение:
{Считать число вершин на N-м уровне}
var N:integer;

function TForm1.LevelLKP(t1:btree;L:integer):integer;
begin
if t1=nil then LevelLKP:=0
else if L=N then LevelLKP:=1
else LevelLKP:=LevelLKP(t1^.ls,L+1) + LevelLKP(t1^.rs,L+1);

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
N:=StrToInt(Edit5.Text);
Edit6.Text:=IntToStr(LevelLKP(t,0));
end;

{Прверить входит ли элемент E}
var E:integer;

function TForm1.MemberLKP(t1:btree):boolean;
begin
if t1=nil then MemberLKP:=false
else if t1.d=E then MemberLKP:=true
else MemberLKP:=MemberLKP(t1^.ls) or MemberLKP(t1^.rs)
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
E:=StrToInt(Edit7.Text);
if MemberLKP(t) then Label8.Caption:='Входит'
else Label8.Caption:='Не входит';
end;
Форма ответа