Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Help Me!

Автор: B@®'o.K. 20.11.2007 6:29

Народ, помогите мне, плиз. Как вывести все элементы бинарного дерева нерекурсивным методом??

М
В следующий раз делай название темы более информативным
klem4


Автор: B@®'o.K. 21.11.2007 4:52

Неужели никто не может мне помочь??!!

Автор: B@®'o.K. 21.11.2007 6:00

Напишите плиз хотя бы код. Вот вам для помощи (я просто в этом мало понимаю):
1)Начальная установка: TOP:=0; P:=T.
2)Если P=nil, то перейти на 4. {конец ветви}
3)Вывести P^.info. Вершину заносим в стек: TOP:=TOP+1; A[TOP]:=P; шаг по левой ветви: P:=P^.llink; перейти на 2.
4)Если TOP=0, то КОНЕЦ.
5)Достаем вершину из стека: P:=A[TOP]; TOP:=TOP-1;
6)Шаг по правой связи: P:=P^.rlink; перейти на 2.

Пожалуйста!! Очень надо!!!

Автор: B@®'o.K. 21.11.2007 6:24

Пусть T – указатель на бинарное дерево; А – стек, в который заносятся адреса еще не пройденных вершин; TOP – вершина стека; P – рабочая переменная.

Автор: volvo 21.11.2007 16:18

var
root: ttree;
i: integer;

a: array[1 .. 50] of ttree;
p: ttree;
top: integer;

begin
root := nil;
for i := 20 to 30 do
additer(root, i);

p := root; top := 0;
while p <> nil do begin
writeln(p^.data);
inc(top);
a[top] := p;
p := p^.left;

if top > 0 then begin
p := a[top];
dec(top);
p := p^.right;
end;
end;
end.


Нерекурсивное добавление (additer) взял отсюда:
http://forum.pascal.net.ru/index.php?s=&showtopic=15237&view=findpost&p=88519

Автор: B@®'o.K. 21.11.2007 17:36

А можно сделать описание ttree, а то я не знаю откуда оно взялось тут (т.е. с какиими параметрами), а также А сделать стеком, а не массивом. И, я думаю, процедуру добавления дерева можно убрать, т.к. мне нужно только вывести нерекурсивно. Пожалуйста, кто знает, исправте!! Буду очень благодарен.


Да и кстати. Это прога работает только наполовину (т.е. она выводит полдерева)

Автор: volvo 21.11.2007 18:49

"Помочь" и "сделать все за тебя" - это немного разные вещи, тебе не кажется?

И вообще... Тот алгоритм, который ты привел, я запрограммировал. Слово в слово. Теперь выясняется, что тебе надо не на массивах, а на стеках. И добавление тебе, оказывается, тоже не надо. А проверять работу алгоритма ты что, теоретически будешь? Ну, так проверяй, значит тебе программа вообще не нужна.

Добавлено через 4 мин.

Цитата
Это прога работает только наполовину (т.е. она выводит полдерева)
Глазки открой, и посмотри на скриншот. Что ТЫ ожидал, что программа выведет?



Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: B@®'o.K. 22.11.2007 7:00

У меня уже ввод есть. Мне нужно только вывести нерекурсивно. У меня пользователь вводит сам числа дерева. А моя задача их вывести. Возможно ты просто неправильно меня понял. И поэтому если использовать как в твоём случае массив, то получается пользователь ограничивается числом вводимых элементов. Пожалуйста, если можно, исправьте эту прогу. Буду благодарен