![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Dunkel_L |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 25 Пол: Мужской Репутация: ![]() ![]() ![]() |
Посмотрел раздел FAQ, нашел дерево с обходами(Но они сделаны через рекурсию). а мне нужен обход через стек,в частости Правый-Левый-Корень (гама-обход) обход.Если не трудно, то помогите, или дайте ссылку ,где можно посмотреть про обходы. [font=Arial]
|
Altair |
![]()
Сообщение
#2
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
http://pco.iis.nsk.su/ICP/Practice/dd8-3/node6.html
Цитата Если использовать стек S для хранения текущего пути по дереву, т.е. пути, который начинается в корне дерева и кончается в вершине, посещаемой в данный момент, то можно предложить следующий нерекурсивный алгоритм префиксного обхода ордерева: -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Dunkel_L |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 25 Пол: Мужской Репутация: ![]() ![]() ![]() |
Вот написал бинарное дерево с гама-обходом(рекурсивный и обход через стек).Рекурсивный работает,а через стек нет((((.Помагите,в чем ошибка?
Код 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. |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Push(p:false);
Это чего такое? ![]() |
Гость |
![]()
Сообщение
#5
|
Гость ![]() |
|
volvo |
![]()
Сообщение
#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? |
CORS@R |
![]()
Сообщение
#7
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 37 Пол: Мужской Реальное имя: Рамиль Репутация: ![]() ![]() ![]() |
Все что нужно можешь найти в этом файле
Прикрепленные файлы ![]() |
Гость |
![]()
Сообщение
#8
|
Гость ![]() |
|
-Dunkel_L- |
![]()
Сообщение
#9
|
Гость ![]() |
Всё всем спасибо,разобрался.Теперь можно тему закрыть.
|
![]() ![]() |
![]() |
Текстовая версия | 22.04.2025 8:04 |