1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Здраствуйте Прошу помощи в решение задачи: Подсчитать число вершин на n-ом уровне непустого дерева Т (корень считать вершиной нулевого дерева) я в этом плохо разбираюсь, но кое-что написал
Исходный код
uses crt; type pitem=^titem; titem=record data:string; pred:pitem; next:pitem; end;
var first,last:pitem; ff:text; ss:string; i:integer;
procedure add(ss:string); var newitem:pitem; d:string; begin for i:=1 to length(ss) do begin d:=ss[1+length(ss)-i]; new(newitem); newitem^.data:=d; newitem^.pred:=nil; newitem^.next:=first; first:=newitem; if last=nil then last:=newitem; end; end;
procedure print; begin
end;
procedure del; var delitem:pitem; begin delitem:=first; if delitem<>nil then begin first:=delitem^.next; delitem^.Pred^.Next:=delitem^.Next; dispose(delitem); end; end;
begin { clrscr; } writeln('--' , memavail);
assign(ff,'E:\derevo.txt'); reset(ff); while not (eof(ff)) do begin readln(ff,ss); writeln(ss); end; add(ss); del; close(ff); writeln('--' , memavail); readln; end.
Вот, что получилось: (рекурсивный разбор строки с одновременным заполнением дерева. В результате получаем бинарное дерево, соответствующее заданному в строке корневому. PrintTreeGraph - для контроля результата, сама функция лежит здесь.
Собственно код:
uses crt, graph;
type ttype = string[1]; binTreeWhere = (binRoot, binLeft, binRight);
Procedure PrintTreeGraph; Begin { сам текст процедуры } End;
function add(var t: pttree; value: ttype; where: binTreeWhere): pttree;
function CreateNode(value: ttype): pttree; var p: pttree; Begin New(p); p^.data := value; p^.Left := nil; p^.Right := nil; createnode := p; End;
begin case where of binRoot : begin t := createNode(value); add := t; end; binLeft : begin t^.left := createNode(value); add := t^.left; end; binRight : begin t^.right := createNode(value); add := t^.right; end; end end;
procedure build_tree(root: pttree; s: string); var i, count, start, finish: integer; subs: string; begin if pos('(', s) + pos(')', s) = 0 then exit; i := 1; count := 0; while i <= length(s) do begin
if pos('(', copy(s, i, 255)) > 0 then begin
while s[i] <> '(' do inc(i); start := i;
inc(count); inc(i); while count > 0 do begin
if s[i] = '(' then inc(count) else if s[i] = ')' then dec(count); inc(i);
end; finish := i;
subs := copy(s, succ(start), finish - start-2);
if pos('(', subs) < 2 then begin if s[succ(start)] <> '(' then begin root := add(root, subs, direction); direction := binRight; end; end else begin root := add(root, s[succ(start)], direction); direction := binLeft; if global_root = nil then global_root := root; end; build_tree(root, subs);
end else break
end;
end;
const s: string = '(0(1(2((5)(6)))(3)(4))(7((8)(9(1)))))'; var root: pttree;
var grDriver: integer; grMode: integer; ErrCode: Integer;
begin root := nil; direction := binRoot;
build_tree(root, ' ' + s + ' ');
grDriver := Detect; InitGraph(grDriver, grMode,''); ErrCode := GraphResult; if ErrCode <> grOk then begin Writeln('Graphics error:', GraphErrorMsg(ErrCode)); Halt(100); end; PrintTreeGraph(global_root); readln; CloseGraph; end.