Народ, помогите мне, плиз. Как вывести все элементы бинарного дерева нерекурсивным методом??
М | В следующий раз делай название темы более информативным klem4 |
Неужели никто не может мне помочь??!!
Напишите плиз хотя бы код. Вот вам для помощи (я просто в этом мало понимаю):
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.
Пожалуйста!! Очень надо!!!
Пусть T – указатель на бинарное дерево; А – стек, в который заносятся адреса еще не пройденных вершин; TOP – вершина стека; P – рабочая переменная.
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.
А можно сделать описание ttree, а то я не знаю откуда оно взялось тут (т.е. с какиими параметрами), а также А сделать стеком, а не массивом. И, я думаю, процедуру добавления дерева можно убрать, т.к. мне нужно только вывести нерекурсивно. Пожалуйста, кто знает, исправте!! Буду очень благодарен.
Да и кстати. Это прога работает только наполовину (т.е. она выводит полдерева)
"Помочь" и "сделать все за тебя" - это немного разные вещи, тебе не кажется?
И вообще... Тот алгоритм, который ты привел, я запрограммировал. Слово в слово. Теперь выясняется, что тебе надо не на массивах, а на стеках. И добавление тебе, оказывается, тоже не надо. А проверять работу алгоритма ты что, теоретически будешь? Ну, так проверяй, значит тебе программа вообще не нужна.
Добавлено через 4 мин.
У меня уже ввод есть. Мне нужно только вывести нерекурсивно. У меня пользователь вводит сам числа дерева. А моя задача их вывести. Возможно ты просто неправильно меня понял. И поэтому если использовать как в твоём случае массив, то получается пользователь ограничивается числом вводимых элементов. Пожалуйста, если можно, исправьте эту прогу. Буду благодарен