Представление записи Создание дерева. Перевод из префиксной записи.
Дан текстовый файл exp, содержащий правильно построенное выражение.
Требуется создать дерево:
((x+1)*y)/2
/*+x1y2
Пока в выражении идут имена функций идём налево.
Натыкаемся на старую проблему: нужно вернуться на предыдущую вершину.
Решение : сохранять ссылки на вершины со свободным правым концом в стеке.
procedure Create(var exp:text;var root:pNode);
var stack:tStack {Стек ссылок на вершины}
c:char; pt:pNode;
begin {Корень создаём отдельно}
reset(exp);
read(exp,c);
root:=NewNode(c); {Создаём вершину с содержимым атрибутом c}
push(stack,root);
while not eof(exp) do
begin
read(exp,c);
while c in [‘+’, ’-‘, ’/’, ’*’] do
begin
pt^.left:=NewNode(c);{Ссылка на текущую вершину дерева}
pt:=pt^.left;
push(stack,pt);
read(exp,c);
end;
pt^.left:=NewNode(c);
read(exp,c);
pt^.right:=NewNode(c);
pt:=pt^.right;
pop(stack,pt);
end;
end;
Примечание: на практике exp нельзя использовать как логическое имя файла! Здесь это использовалось в силу того, что expression (англ.) – выражение.
Дата добавления: 2014-01-05 ; Просмотров: 262 ; Нарушение авторских прав? ; Мы поможем в написании вашей работы!
Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет