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;