IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Бинарное дерево, Нужна помощь
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 25
Пол: Мужской

Репутация: -  0  +


Посмотрел раздел FAQ, нашел дерево с обходами(Но они сделаны через рекурсию). а мне нужен обход через стек,в частости Правый-Левый-Корень (гама-обход) обход.Если не трудно, то помогите, или дайте ссылку ,где можно посмотреть про обходы. [font=Arial]
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


http://pco.iis.nsk.su/ICP/Practice/dd8-3/node6.html
Цитата
Если использовать стек S для хранения текущего пути по дереву, т.е. пути, который начинается в корне дерева и кончается в вершине, посещаемой в данный момент, то можно предложить следующий нерекурсивный алгоритм префиксного обхода ордерева:


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 25
Пол: Мужской

Репутация: -  0  +


Вот написал бинарное дерево с гама-обходом(рекурсивный и обход через стек).Рекурсивный работает,а через стек нет((((.Помагите,в чем ошибка?
Код

Uses crt;

type ptr = ^node;
node = record
  info : char;
  llink, rlink : ptr;
end;

     pStack = ^tStack;
tStack =  record
  nd : ptr;
  next : pStack;
end;


procedure Push (var Stack: pStack; nd: ptr);
var StackEl: pStack;
begin
new (StackEl);
StackEl^.next:=Stack;
Stack:=StackEl;
StackEl^.nd:=nd;
end;

function Pop (Var Stack: pStack): ptr;
var StackEl: pStack;
begin
pop:=Stack^.nd;
StackEl:=Stack;
Stack:=StackEl^.next;
dispose (StackEl);
end;

procedure PrintTree( p : ptr;  h : integer );
begin
if p<>nil then begin
  PrintTree(p^.llink, h+1);
  gotoxy(wherex, h);
  textcolor(yellow);
  write(p^.info);
  textcolor(white);
  PrintTree(p^.rlink, h+1);
end;
end;

function CreateTree( n : integer; var i : integer) : ptr;
var newnode : ptr;
     nl, nr : integer;
     x : char;
begin
if n <= 0 then CreateTree := nil
else begin
  nl := n div 2;
  nr := n - nl - 1;
  i:=i+1;
  writeln;
  write ('Vvedite info uzla ',i,': ');
  readln(x);
  new(newnode);
  newnode^.info := x;
  newnode^.llink := CreateTree(nl, i);
  newnode^.rlink := CreateTree(nr, i);
  CreateTree := newnode;
end;
end;

procedure PLK(p : ptr);
begin
if p <> nil then begin
  plk(p^.Rlink);
  plk(p^.Llink);
  write(p^.info, ' ');
end;
end;

procedure plkstack(stack : ptr);
var root,p:ptr;
    flag : boolean;
    pr: boolean;

begin
p:=root;
{stack:=nil;}
flag := true;
while flag = true do begin
  while p <> nil do begin
   Push(p:false);
   p := p^.llink;
  end;
  p := Pop(pr);
  if pr=true then begin
  write(p^.info,' ');
  p:=nil;
  end
  else begin
   Push(p:true);
   p := p^.rlink;
  end;
  if stack=nil then begin flag:=false;
end;
end;

var root : ptr;
    n,i :integer;
begin
clrscr;
i:=0;

writeln('DEREVO');

write('Vvedite kolichestvo uzlov: ');
writeln;
readln(n);
root := CreateTree(n,i);
writeln('Psevdograficheskiy risunok: ');
PrintTree(root, n+5);
gotoxy(1, 2*n+3);
writeln('Gama-obhod (rekursiya): ');
PLK (root);
writeln;
writeln('Gama-obhod (stack): ');
plkstack(root);
readln;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






   Push(p:false);
Это чего такое? blink.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Цитата(volvo @ 9.03.2006 23:27) *

   Push(p:false);
Это чего такое? blink.gif

это р с признаком false помещается в стек
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Цитата
р с признаком false помещается в стек
Я, конечно, извиняюсь, но в Паскале такое НЕ принято. В стек может помещаться то, что он сможет ХРАНИТЬ. А где в описаниях
type ptr = ^node;
node = record
  info : char;
  llink, rlink : ptr;
end;

pStack = ^tStack;
tStack =  record
  nd : ptr;
  next : pStack;
end;
мы видим хоть одно слово о True/False и вообще о типе Boolean?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской
Реальное имя: Рамиль

Репутация: -  0  +


Все что нужно можешь найти в этом файле


Прикрепленные файлы
Прикрепленный файл  T6_1.PAS ( 4.99 килобайт ) Кол-во скачиваний: 336
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Цитата(CORS@R @ 10.03.2006 14:58) *

Все что нужно можешь найти в этом файле

Где здесь гама-обхот через стек? unsure.gif объясните,пожалуйста
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Всё всем спасибо,разобрался.Теперь можно тему закрыть.
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 22.04.2025 8:04
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name